Index: Open-ILS/xul/staff_client/chrome/locale/en-US/common.properties
===================================================================
--- Open-ILS/xul/staff_client/chrome/locale/en-US/common.properties	(revision 7631)
+++ Open-ILS/xul/staff_client/chrome/locale/en-US/common.properties	(working copy)
@@ -1,2 +1,6 @@
 common.exception=!! This software has encountered an error.  Please tell your friendly system administrator or software developer the following:\n%1$S\n%2$S\n
 common.jsan.missing=The JSAN library object is missing.
+common.ok=Ok
+common.clear=Clear
+common.confirm=Check here to confirm this message.
+common.error.default=Please report that this happened.
Index: Open-ILS/xul/staff_client/chrome/content/circ/offline_checkin.js
===================================================================
--- Open-ILS/xul/staff_client/chrome/content/circ/offline_checkin.js	(revision 7631)
+++ Open-ILS/xul/staff_client/chrome/content/circ/offline_checkin.js	(working copy)
@@ -1,14 +1,16 @@
+var commonStrings = document.getElementById('commonStrings');
+var circStrings = document.getElementById('circStrings');
 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('..');
 		JSAN.use('util.error'); g.error = new util.error();
 		g.error.sdump('D_TRACE','my_init() for offline_checkin.xul');
 
 		if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
-			try { window.xulG.set_tab_name('Standalone'); } catch(E) { alert(E); }
+			try { window.xulG.set_tab_name(circStrings.getString('circ.standalone')); } catch(E) { alert(E); }
 		}
 
 		JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
@@ -34,8 +36,7 @@
 		if (file._file.exists()) { g.delta = file.get_object()[0]; file.close(); } else { g.delta = 0; }
 
 	} catch(E) {
-		var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
-			"system administrator or software developer the following:\ncirc/offline_checkin.xul\n" + E + '\n';
+		var err_msg = commonStrings.getFormattedMessage('common.exception', ["circ/offline_checkin.xul", E]);
 		try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
 		alert(err_msg);
 	}
@@ -54,7 +55,7 @@
 function handle_enter(ev) {
 	JSAN.use('util.barcode');
 	if ( ($('strict_i_barcode').checked) && (! util.barcode.check($('i_barcode').value)) ) {
-		var r = g.error.yns_alert('This barcode has a bad checkdigit.','Barcode Warning','Ok','Clear',null,'Check here to confirm this message');
+		var r = g.error.yns_alert(circStrings.getString('circ.bad_checkdigit'),circStrings.getString('circ.barcode.warning'),commonStrings.getString('common.ok'),commonStrings.getString('common.clear'),null,commonStrings.getString('common.confirm'));
 		if (r == 1) {
 			setTimeout(
 				function() {
@@ -78,6 +79,7 @@
 
 		my.type = 'checkin';
 		my.timestamp = parseInt( new Date().getTime() / 1000) + g.delta;
+		/* I18N to-do: enable localized date formats */
 		my.backdate = util.date.formatted_date(new Date(),"%F %H:%M:%s");
 
 		var i_barcode = $('i_barcode').value;
Index: Open-ILS/xul/staff_client/chrome/content/circ/offline_checkout.js
===================================================================
--- Open-ILS/xul/staff_client/chrome/content/circ/offline_checkout.js	(revision 7631)
+++ Open-ILS/xul/staff_client/chrome/content/circ/offline_checkout.js	(working copy)
@@ -1,7 +1,10 @@
+var commonStrings = document.getElementById('commonStrings');
+var circStrings = document.getElementById('circStrings');
+
 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('..');
 		JSAN.use('util.error'); g.error = new util.error();
@@ -10,7 +13,7 @@
 		JSAN.use('util.widgets'); JSAN.use('util.file');
 
 		if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
-			try { window.xulG.set_tab_name('Standalone'); } catch(E) { alert(E); }
+			try { window.xulG.set_tab_name(circStrings.getString('circ.standalone')); } catch(E) { alert(E); }
 		}
 
 		JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
@@ -53,29 +56,28 @@
 		if (file._file.exists()) {
 			list_data = file.get_object(); file.close();
 			ml = util.widgets.make_menulist( 
-				[ ['or choose a non-barcoded option...', ''] ].concat(list_data[0]), 
+				[ [circStrings.getString('circ.offline_checkout.nonbarcoded'), ''] ].concat(list_data[0]), 
 				list_data[1] 
 			);
 			ml.setAttribute('id','noncat_type_menu'); $('x_noncat_type').appendChild(ml);
 			ml.addEventListener(
 				'command',
 				function(ev) { 
-					var count = window.prompt('Enter the number of items:',1,ml.getAttribute('label'));
+					var count = window.prompt(circStrings.getString('circ.offline_checkout.items'),1,ml.getAttribute('label'));
 					append_to_list('noncat',count);	
 					ml.value = '';
 				},
 				false
 			);
 		} else {
-			alert('WARNING: The non-barcode types have not been downloaded from the server.  You should log in to retrieve these.');
+			alert(circStrings.getString('circ.offline_checkout.download.warning'));
 		}
 
 		var file = new util.file('offline_delta'); 
 		if (file._file.exists()) { g.delta = file.get_object()[0]; file.close(); } else { g.delta = 0; }
 
 	} catch(E) {
-		var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
-			"system administrator or software developer the following:\ncirc/offline_checkout.xul\n" + E + '\n';
+		var err_msg = commonStrings.getFormattedMessage('common.exception', ["circ/offline_checkout.xul", E]);
 		try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
 		alert(err_msg);
 	}
@@ -88,7 +90,7 @@
 		var barcode = ev.target.value;
 		JSAN.use('util.barcode');
 		if ( ($('strict_p_barcode').checked) && (! util.barcode.check(barcode)) ) {
-			var r = g.error.yns_alert('This barcode has a bad checkdigit.','Barcode Warning','Ok','Clear',null,'Check here to confirm this message');
+			var r = g.error.yns_alert(circStrings.getString('circ.bad_checkdigit'),circStrings.getString('circ.barcode.warning'),commonStrings.getString('common.ok'),commonStrings.getString('common.clear'),null,commonStrings.getString('common.confirm'));
 			if (r == 1) {
 				setTimeout(
 					function() {
@@ -100,15 +102,15 @@
 
 		}
 		if (g.data.bad_patrons[barcode]) {
-			var msg = 'Warning: As of ' + g.data.bad_patrons_date.substr(0,15) + ', this barcode (' + barcode + ') was flagged ';
+			var msg = '';
 			switch(g.data.bad_patrons[barcode]) {
-				case 'L' : msg += 'Lost'; break;
-				case 'E' : msg += 'Expired'; break;
-				case 'B' : msg += 'Barred'; break;
-				case 'D' : msg += 'Blocked'; break;
-				default : msg += ' with an unknown code: ' + g.data.bad_patrons[barcode]; break;
+				case 'L' : msg = circStrings.getFormattedString('circ.offline_checkout.barcode.flagged.lost', [g.data.bad_patrons_date.substr(0,15), barcode]); break;
+				case 'E' : msg = circStrings.getFormattedString('circ.offline_checkout.barcode.flagged.expired', [g.data.bad_patrons_date.substr(0,15), barcode]); break;
+				case 'B' : msg = circStrings.getFormattedString('circ.offline_checkout.barcode.flagged.barred', [g.data.bad_patrons_date.substr(0,15), barcode]); break;
+				case 'D' : msg = circStrings.getFormattedString('circ.offline_checkout.barcode.flagged.blocked', [g.data.bad_patrons_date.substr(0,15), barcode]); break;
+				default : msg = circStrings.getFormattedString('circ.offline_checkout.barcode.flagged.unknown', [g.data.bad_patrons_date.substr(0,15), barcode, g.data.bad_patrons[barcode]]); break;
 			}
-			var r = g.error.yns_alert(msg,'Barcode Warning','Ok','Clear',null,'Check here to confirm this message');
+			var r = g.error.yns_alert(msg,circStrings.getString('circ.barcode.warning'),commonStrings.getString('common.ok'),commonStrings.getString('common.clear'),null,commonStrings.getString('common.confirm'));
 			if (r == 1) {
 				setTimeout(
 					function() {
@@ -126,9 +128,9 @@
 function check_date(ev) {
 	JSAN.use('util.date');
 	try {
-		if (! util.date.check('YYYY-MM-DD',ev.target.value) ) { throw('Invalid Date'); }
-		if (util.date.check_past('YYYY-MM-DD',ev.target.value) ) { throw('Due date needs to be after today.'); }
-		if ( util.date.formatted_date(new Date(),'%F') == ev.target.value) { throw('Due date needs to be after today.'); }
+		if (! util.date.check('YYYY-MM-DD',ev.target.value) ) { throw(circStrings.getString('circ.offline_checkout.date.invalid')); }
+		if (util.date.check_past('YYYY-MM-DD',ev.target.value) ) { throw(circStrings.getString('circ.offline_checkout.date.early')); }
+		if (util.date.formatted_date(new Date(),'%F') == ev.target.value) { throw(circStrings.getString('circ.offline_checkout.date.early')); }
 	} catch(E) {
 		alert(E);
 		var today = new Date();
@@ -150,7 +152,7 @@
 function handle_enter(ev) {
 	JSAN.use('util.barcode');
 	if ( ($('strict_i_barcode').checked) && (! util.barcode.check($('i_barcode').value)) ) {
-		var r = g.error.yns_alert('This barcode has a bad checkdigit.','Barcode Warning','Ok','Clear',null,'Check here to confirm this message');
+		var r = g.error.yns_alert(circStrings.getString('circ.bad_checkdigit'),circStrings.getString('circ.barcode.warning'),commonStrings.getString('common.ok'),commonStrings.getString('common.clear'),null,commonStrings.getString('common.confirm'));
 		if (r == 1) {
 			setTimeout(
 				function() {
@@ -189,7 +191,7 @@
 
 		var p_barcode = $('p_barcode').value;
 		if (! p_barcode) {
-			g.error.yns_alert('Please enter a patron barcode first.','Required Field','Ok',null,null,'Check here to confirm this message');
+			g.error.yns_alert(circStrings.getString('circ.barcode.enter'),circStrings.getString('circ.offline_checkout.required_field'),commonStrings.getString('common.ok'),null,null,commonStrings.getString('common.confirm'));
 			return;
 		} else {
 
@@ -208,7 +210,7 @@
 				var rows = g.list.dump_with_keys();
 				for (var i = 0; i < rows.length; i++) {
 					if (rows[i].barcode == i_barcode) {
-						g.error.yns_alert('This barcode has already been scanned.','Duplicate Scan','Ok',null,null,'Check here to confirm this message');
+						g.error.yns_alert(circStrings.getString('circ.duplicate_scan.msg'),circStrings.getString('circ.duplicate_scan.field'),commonStrings.getString('common.ok'),null,null,commonStrings.getString('common.confirm'));
 						return;
 					}
 				}
@@ -217,7 +219,7 @@
 			break;
 			case 'noncat' :
 				count = parseInt(count); if (! (count>0) ) {
-					g.error.yns_alert("Please try again and enter a valid count.",'Required Value','Ok',null,null,'Check here to confirm this message');
+					g.error.yns_alert(circStrings.getString('circ.offline_checkout.valid_count'),circStrings.getString('circ.offline_checkout.required_value'),commonStrings.getString('common.ok'),null,null,commonStrings.getString('common.confirm'));
 					return;
 				}
 				my.barcode = $('noncat_type_menu').getAttribute('label');
@@ -225,7 +227,7 @@
 				my.noncat_type = JSON2js($('noncat_type_menu').value)[0];
 				my.noncat_count = count;
 			break;
-			default: alert("Please report that this happened."); break;
+			default: alert(commonStrings.getString('common.error.default')); break;
 		}
 	
 		g.list.append( { 'row' : { 'my' : my }, 'to_top' : true } );
Index: Open-ILS/xul/staff_client/chrome/content/circ/offline.xul
===================================================================
--- Open-ILS/xul/staff_client/chrome/content/circ/offline.xul	(revision 7631)
+++ Open-ILS/xul/staff_client/chrome/content/circ/offline.xul	(working copy)
@@ -30,17 +30,20 @@
 	<script type="text/javascript" src="chrome://open_ils_staff_client/content/main/JSAN.js"/>
 	<script>
 	<![CDATA[
+		var circStrings = document.getElementById('circStrings');
+		var commonStrings = document.getElementById('commonStrings');
+
 		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('..');
 				JSAN.use('util.error'); g.error = new util.error();
 				g.error.sdump('D_TRACE','my_init() for offline.xul');
 
 				if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
-					try { window.xulG.set_tab_name('Standalone'); } catch(E) { alert(E); }
+					try { window.xulG.set_tab_name(circStrings.getString('circ.standalone')); } catch(E) { alert(E); }
 				}
 
 				g.cgi = new CGI();
@@ -53,6 +56,7 @@
 				JSAN.use('util.date');
 				
 				function update_clock() {
+					/* I18N to-do: enable localized date formats */
 					var today = util.date.formatted_date(new Date(),"%F %H:%M:%s");
 					document.getElementById('today').setAttribute('label',today);
 					setTimeout(update_clock,1);
@@ -61,8 +65,7 @@
 				update_clock();
 
 			} catch(E) {
-				var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
-					"system administrator or software developer the following:\ncirc/offline.xul\n" + E + '\n';
+				var err_msg = commonStrings.getFormattedString('common.exception', ["circ/offline.xul", E]);
 				try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
 				alert(err_msg);
 			}
@@ -71,18 +74,23 @@
 	]]>
 	</script>
 
+	<stringbundleset id="circBundleSet">
+		<stringbundle id="commonStrings" src="chrome://open_ils_staff_client/locale/common.properties"/>
+		<stringbundle id="circStrings" src="chrome://open_ils_staff_client/locale/circ.properties"/>
+	</stringbundleset>
+
 	<groupbox flex="1" class="my_overflow">
-		<caption label="Evergreen Offline"/>
+		<caption label="&staff.circ.offline.main.label;"/>
 		<hbox id="nav">
-			<button id="today" onclick="alert('Not Yet Implemented');" tooltiptext="Estimated Server Time - Click to adjust"/>
+			<button id="today" onclick="alert('&common.unimplemented;');" tooltiptext="&staff.circ.offline.server_time.tooltiptext;"/>
 			<spacer flex="1"/>
-			<button id="cmd_checkout" label="Check Out" accesskey="C"/>
-			<button id="cmd_renew" label="Renew" accesskey="r"/>
-			<button id="cmd_in_house_use" label="In House Use" accesskey="h"/>
-			<button id="cmd_checkin" label="Check In" accesskey="i"/>
-			<button id="cmd_register_patron" label="Register Patron" accesskey="p"/>
-			<button id="cmd_print_last_receipt" label="Last Receipt" accesskey="l"/>
-			<button id="cmd_exit" label="Exit" accesskey="x"/>
+			<button id="cmd_checkout" label="&staff.circ.offline.cmd_checkout.label;" accesskey="&staff.circ.offline.cmd_checkout.accesskey;"/>
+			<button id="cmd_renew" label="&staff.circ.offline.cmd_renew.label;" accesskey="&staff.circ.offline.cmd_renew.accesskey;"/>
+			<button id="cmd_in_house_use" label="&staff.circ.offline.cmd_in_house_use.label;" accesskey="&staff.circ.offline.cmd_in_house_use.accesskey;"/>
+			<button id="cmd_checkin" label="&staff.circ.offline.cmd_checkin.label;" accesskey="&staff.circ.offline.cmd_checkin.accesskey;"/>
+			<button id="cmd_register_patron" label="&staff.circ.offline.cmd_register_patron.label;" accesskey="&staff.circ.offline.cmd_register_patron.accesskey;"/>
+			<button id="cmd_print_last_receipt" label="&staff.circ.offline.cmd_print_last_receipt.label;" accesskey="&staff.circ.offline.cmd_print_last_receipt.accesskey;"/>
+			<button id="cmd_exit" label="&staff.circ.offline.cmd_exit.label;" accesskey="&staff.circ.offline.cmd_exit.accesskey;"/>
 		</hbox>
 		<deck id="main" style="border: solid thin red; background-color: #FFAAAA;" flex="1">
 			<vbox flex="1">
Index: Open-ILS/xul/staff_client/chrome/content/circ/offline_checkin.xul
===================================================================
--- Open-ILS/xul/staff_client/chrome/content/circ/offline_checkin.xul	(revision 7631)
+++ Open-ILS/xul/staff_client/chrome/content/circ/offline_checkin.xul	(working copy)
@@ -29,44 +29,49 @@
 	<script type="text/javascript" src="chrome://open_ils_staff_client/content/main/JSAN.js"/>
 	<script type="text/javascript" src="offline_checkin.js"/>
 
+	<stringbundleset id="circBundleSet">
+		<stringbundle id="commonStrings" src="chrome://open_ils_staff_client/locale/common.properties"/>
+		<stringbundle id="circStrings" src="chrome://open_ils_staff_client/locale/circ.properties"/>
+	</stringbundleset>
+
 	<groupbox flex="1">
-		<caption label="Standalone Check In"/>
+		<caption label="&staff.circ.offline_checkin.main.label;"/>
 		<hbox flex="1">
 			<vbox flex="1">
 				<hbox>
-					<label value="Step 1)" style="font-weight: bold" />
-					<description>Check today's date above.</description>
+					<label value="&staff.circ.offline_checkin.step1.label;" style="font-weight: bold" />
+					<description>&staff.circ.offline_checkin.step1.description;</description>
 				</hbox>
 				<hbox>
-					<label value="Step 2)" style="font-weight: bold" accesskey="2" control="i_barcode"/>
-					<description>Enter the item barcode:</description>
+					<label value="&staff.circ.offline_checkin.step2.label;" style="font-weight: bold" accesskey="&staff.circ.offline_checkin.step2.accesskey;" control="i_barcode"/>
+					<description>&staff.circ.offline_checkin.step2.description;</description>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
-					<hbox><textbox id="i_barcode"/><button id="enter" label="Enter" accesskey="E"/></hbox>
+					<hbox><textbox id="i_barcode"/><button id="enter" label="&staff.circ.offline_checkin.step2a.label;" accesskey="&staff.circ.offline_checkin.step2a.accesskey;"/></hbox>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
-					<description>Check barcode?</description>
+					<description>&staff.circ.offline_checkin.step2b.label;</description>
 					<checkbox id="strict_i_barcode" persist="checked"/>
 				</hbox>
 				<hbox>
-					<label value="Step 3)" style="font-weight: bold"/>
-					<description>Repeat Steps 2 until done.</description>
+					<label value="&staff.circ.offline_checkin.step3.label;" style="font-weight: bold"/>
+					<description>&staff.circ.offline_checkin.step3.description;</description>
 				</hbox>
 				<hbox>
-					<label value="Step 4)" style="font-weight: bold"/>
-					<description>Finish</description>
+					<label value="&staff.circ.offline_checkin.step4.label;" style="font-weight: bold"/>
+					<description>&staff.circ.offline.finish.description;</description>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
-					<description>Print receipt?</description>
+					<description>&staff.circ.offline.print.description;</description>
 					<checkbox id="print_receipt" persist="checked"/>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
-					<button id="cancel" label="Cancel" oncommand="g.list.clear()"/>
-					<button id="submit" label="Save these transactions" accesskey="S" />
+					<button id="cancel" label="&common.cancel;" oncommand="g.list.clear()"/>
+					<button id="submit" label="&common.save_transactions.label;" accesskey="&common.save_transactions.accesskey;" />
 				</hbox>
 			</vbox>
 			<splitter>
@@ -76,7 +81,7 @@
 				<tree id="checkin_list" flex="1" enableColumnDrag="true"/>
 				<hbox id="checkin_bottom_ui">
 					<spacer flex="1"/>
-					<button id="delete" label="Delete selected transaction" oncommand="alert('Not Yet Implemented');"/>
+					<button id="delete" label="&common.delete_transactions.label;" oncommand="alert('&common.unimplemented;');"/>
 				</hbox>
 			</vbox>
 		</hbox>
Index: Open-ILS/xul/staff_client/chrome/content/circ/offline_checkout.xul
===================================================================
--- Open-ILS/xul/staff_client/chrome/content/circ/offline_checkout.xul	(revision 7631)
+++ Open-ILS/xul/staff_client/chrome/content/circ/offline_checkout.xul	(working copy)
@@ -29,17 +29,22 @@
 	<script type="text/javascript" src="chrome://open_ils_staff_client/content/main/JSAN.js"/>
 	<script type="text/javascript" src="offline_checkout.js"/>
 
+	<stringbundleset id="circBundleSet">
+		<stringbundle id="commonStrings" src="chrome://open_ils_staff_client/locale/common.properties"/>
+		<stringbundle id="circStrings" src="chrome://open_ils_staff_client/locale/circ.properties"/>
+	</stringbundleset>
+
 	<groupbox flex="1">
-		<caption label="Standalone Check Out"/>
+		<caption label="&staff.circ.offline_checkout.main.label;"/>
 		<hbox flex="1">
 			<vbox flex="1">
 				<hbox>
-					<label value="Step 1)" style="font-weight: bold" />
-					<description>Check today's date above.</description>
+					<label value="&staff.circ.offline_checkout.step1.label;" style="font-weight: bold" />
+					<description>&staff.circ.offline_checkout.step1.description;</description>
 				</hbox>
 				<hbox>
-					<label value="Step 2)" style="font-weight: bold" accesskey="2" control="p_barcode"/>
-					<description>Enter the patron's barcode:</description>
+					<label value="&staff.circ.offline_checkout.step2.label;" style="font-weight: bold" accesskey="&staff.circ.offline_checkout.step2.accesskey;" control="p_barcode"/>
+					<description>&staff.circ.offline_checkout.step2.description;</description>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
@@ -47,12 +52,12 @@
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
-					<description>Check barcode?</description>
+					<description>&staff.circ.offline_checkout.strict_barcode.label;</description>
 					<checkbox id="strict_p_barcode" persist="checked"/>
 				</hbox>
 				<hbox>
-					<label value="Step 3)" style="font-weight: bold" accesskey="3" control="duedate"/>
-					<description>Enter the item due date:</description>
+					<label value="&staff.circ.offline_checkout.step3.label;" style="font-weight: bold" accesskey="&staff.circ.offline_checkout.step3.accesskey;" control="duedate"/>
+					<description>&staff.circ.offline_checkout.step3.description;</description>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
@@ -62,21 +67,21 @@
 					<spacer flex="1"/>
 					<menulist id="duedate_menu">
 						<menupopup>
-							<menuitem label="or choose one of these" value="0"/>
-							<menuitem label="Today + 3 days" value="3"/>
-							<menuitem label="Today + 7 days" value="7"/>
-							<menuitem label="Today + 14 days" value="14"/>
-							<menuitem label="Today + 30 days" value="30"/>
+							<menuitem label="&staff.circ.offline_checkout.date_helper;" value="0"/>
+							<menuitem label="&staff.circ.offline_checkout.date_helper.3_days;" value="3"/>
+							<menuitem label="&staff.circ.offline_checkout.date_helper.7_days;" value="7"/>
+							<menuitem label="&staff.circ.offline_checkout.date_helper.14_days;" value="14"/>
+							<menuitem label="&staff.circ.offline_checkout.date_helper.30_days;" value="30"/>
 						</menupopup>
 					</menulist>
 				</hbox>
 				<hbox>
-					<label value="Step 4)" style="font-weight: bold" accesskey="4" control="i_barcode"/>
-					<description>Enter the item barcode:</description>
+					<label value="&staff.circ.offline_checkout.step4.label;" style="font-weight: bold" accesskey="&staff.circ.offline_checkout.step4.accesskey;" control="i_barcode"/>
+					<description>&staff.circ.offline_checkout.step4.description;</description>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
-					<hbox><textbox id="i_barcode"/><button id="enter" label="Enter" accesskey="E"/></hbox>
+					<hbox><textbox id="i_barcode"/><button id="enter" label="&common.enter;" accesskey="&common.enter.accesskey;"/></hbox>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
@@ -84,26 +89,26 @@
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
-					<description>Check barcode?</description>
+					<description>&staff.circ.offline_checkout.strict_barcode.label;</description>
 					<checkbox id="strict_i_barcode" persist="checked"/>
 				</hbox>
 				<hbox>
-					<label value="Step 5)" style="font-weight: bold"/>
-					<description>Repeat Steps 3 and 4 until done.</description>
+					<label value="&staff.circ.offline_checkout.step5.label;" style="font-weight: bold"/>
+					<description>&staff.circ.offline_checkout.step5.description;</description>
 				</hbox>
 				<hbox>
-					<label value="Step 6)" style="font-weight: bold"/>
-					<description>Finish</description>
+					<label value="&staff.circ.offline_checkout.step6.label;" style="font-weight: bold"/>
+					<description>&staff.circ.offline.finish.description;</description>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
-					<description>Print receipt?</description>
+					<description>&staff.circ.offline.print.description;</description>
 					<checkbox id="print_receipt" persist="checked"/>
 				</hbox>
 				<hbox>
 					<spacer flex="1"/>
-					<button id="cancel" label="Cancel" />
-					<button id="submit" label="Save these transactions" accesskey="S" />
+					<button id="cancel" label="&common.cancel;" />
+					<button id="submit" label="&common.save_transactions.label;" accesskey="&common.save_transactions.accesskey;" />
 				</hbox>
 			</vbox>
 			<splitter>
@@ -113,7 +118,7 @@
 				<tree id="checkout_list" flex="1" enableColumnDrag="true"/>
 				<hbox id="checkout_bottom_ui">
 					<spacer flex="1"/>
-					<button id="delete" label="Delete selected transaction" oncommand="alert('Not Yet Implemented');"/>
+					<button id="delete" label="&common.delete_transactions.label;" oncommand="alert('&common.unimplemented;');"/>
 				</hbox>
 			</vbox>
 		</hbox>
Index: Open-ILS/xul/staff_client/chrome/content/main/menu_frame_menus.xul
===================================================================
--- Open-ILS/xul/staff_client/chrome/content/main/menu_frame_menus.xul	(revision 7631)
+++ Open-ILS/xul/staff_client/chrome/content/main/menu_frame_menus.xul	(working copy)
@@ -129,7 +129,7 @@
 		<menuseparator />
 		<menuitem label="&staff.main.menu.circ.barcode.show_item;" accesskey="&staff.main.menu.circ.barcode.show_item.accesskey;" key="copy-status-key" command="cmd_copy_status"/>
 		<menuitem label="&staff.main.menu.circ.barcode.retrieve_patron;" accesskey="&staff.main.menu.circ.barcode.retrieve_patron.accesskey;" key="circ-checkout-key" command="cmd_circ_checkout"/>
-		<menuitem label="&staff.main.menu.barcode.replace;" command="cmd_replace_barcode"/>
+		<menuitem label="&staff.main.menu.replace_barcode.label;" command="cmd_replace_barcode"/>
 		<menuitem label="&staff.main.menu.circ.in_house.label;" accesskey="&staff.main.menu.circ.in_house.accesskey;" key="circ-in-house-use-key" command="cmd_in_house_use"/>
 		<menuseparator />
 		<menuitem label="&staff.main.menu.circ.reprint.label;" accesskey="&staff.main.menu.circ.reprint.accesskey;" command="cmd_reprint"/>
Index: Open-ILS/web/opac/locale/en-US/lang.dtd
===================================================================
--- Open-ILS/web/opac/locale/en-US/lang.dtd	(revision 7631)
+++ Open-ILS/web/opac/locale/en-US/lang.dtd	(working copy)
@@ -2,6 +2,8 @@
 <!ENTITY lang.description "English">
 <!ENTITY lang.author "PINES">
 
+<!ENTITY common.enter "Enter">
+<!ENTITY common.enter.accesskey "E">
 <!ENTITY common.title "Title">
 <!ENTITY common.author "Author">
 <!ENTITY common.subject "Subject">
@@ -21,6 +23,10 @@
 <!ENTITY common.password "Password">
 <!ENTITY common.submit "Submit">
 <!ENTITY common.user_not_found "User not found">
+<!ENTITY common.unimplemented 'Not Yet Implemented'>
+<!ENTITY common.delete_transactions.label 'Delete selected transaction'>
+<!ENTITY common.save_transactions.accesskey 'S'>
+<!ENTITY common.save_transactions.label 'Save these transactions'>
 
 <!ENTITY ilsevent.1000 "Login failed.  The username or password entered was incorrect.">
 <!ENTITY ilsevent.1001 "Login session has timed out or does not exist">
@@ -296,6 +302,57 @@
 <!ENTITY staff.checkin_patron.retrieve 'Retrieve Patron'>
 <!ENTITY staff.checkin_patron.retrieve.accesskey 'R'>
 <!ENTITY staff.checkout_interface_label "CHECK OUT">
+<!ENTITY staff.circ.offline.main.label 'Evergreen Offline'>
+<!ENTITY staff.circ.offline.server_time.tooltiptext 'Estimated Server Time - Click to adjust'>
+<!ENTITY staff.circ.offline.cmd_checkout.accesskey 'C'>
+<!ENTITY staff.circ.offline.cmd_checkout.label 'Check Out'>
+<!ENTITY staff.circ.offline.cmd_renew.accesskey 'r'>
+<!ENTITY staff.circ.offline.cmd_renew.label 'Renew'>
+<!ENTITY staff.circ.offline.cmd_in_house_use.accesskey 'h'>
+<!ENTITY staff.circ.offline.cmd_in_house_use.label 'In House Use'>
+<!ENTITY staff.circ.offline.cmd_checkin.accesskey 'i'>
+<!ENTITY staff.circ.offline.cmd_checkin.label 'Check In'>
+<!ENTITY staff.circ.offline.cmd_register_patron.accesskey 'p'>
+<!ENTITY staff.circ.offline.cmd_register_patron.label 'Register Patron'>
+<!ENTITY staff.circ.offline.cmd_print_last_receipt.accesskey 'l'>
+<!ENTITY staff.circ.offline.cmd_print_last_receipt.label 'Last Receipt'>
+<!ENTITY staff.circ.offline.cmd_exit.accesskey 'x'>
+<!ENTITY staff.circ.offline.cmd_exit.label 'Exit'>
+<!ENTITY staff.circ.offline_checkin.main.label 'Standalone Check In'>
+<!ENTITY staff.circ.offline_checkin.step1.description "Check today's date above.">
+<!ENTITY staff.circ.offline_checkin.step1.label 'Step 1)'>
+<!ENTITY staff.circ.offline_checkin.step2.accesskey '2'>
+<!ENTITY staff.circ.offline_checkin.step2.description 'Enter the item barcode:'>
+<!ENTITY staff.circ.offline_checkin.step2.label 'Step 2)'>
+<!ENTITY staff.circ.offline_checkin.step2a.accesskey 'E'>
+<!ENTITY staff.circ.offline_checkin.step2a.label 'Enter'>
+<!ENTITY staff.circ.offline_checkin.step2b.label 'Check barcode?'>
+<!ENTITY staff.circ.offline_checkin.step3.description 'Repeat Steps 2 until done.'>
+<!ENTITY staff.circ.offline_checkin.step3.label 'Step 3)'>
+<!ENTITY staff.circ.offline.finish.description 'Finish'>
+<!ENTITY staff.circ.offline_checkin.step4.label 'Step 4)'>
+<!ENTITY staff.circ.offline.print.description 'Print receipt?'>
+<!ENTITY staff.circ.offline_checkout.main.label 'Standalone Check Out'>
+<!ENTITY staff.circ.offline_checkout.step1.description "Check today's date above.">
+<!ENTITY staff.circ.offline_checkout.step1.label 'Step 1)'>
+<!ENTITY staff.circ.offline_checkout.step2.accesskey '2'>
+<!ENTITY staff.circ.offline_checkout.step2.description "Enter the patron's barcode:">
+<!ENTITY staff.circ.offline_checkout.step2.label 'Step 2)'>
+<!ENTITY staff.circ.offline_checkout.step3.accesskey '3'>
+<!ENTITY staff.circ.offline_checkout.step3.description 'Enter the item due date:'>
+<!ENTITY staff.circ.offline_checkout.step3.label 'Step 3)'>
+<!ENTITY staff.circ.offline_checkout.step4.accesskey '4'>
+<!ENTITY staff.circ.offline_checkout.step4.description 'Enter the item barcode:'>
+<!ENTITY staff.circ.offline_checkout.step4.label 'Step 4)'>
+<!ENTITY staff.circ.offline_checkout.step5.description 'Repeat Steps 3 and 4 until done.'>
+<!ENTITY staff.circ.offline_checkout.step5.label 'Step 5)'>
+<!ENTITY staff.circ.offline_checkout.step6.label 'Step 6)'>
+<!ENTITY staff.circ.offline_checkout.date_helper 'or choose one of these'>
+<!ENTITY staff.circ.offline_checkout.date_helper.3_days 'Today + 3 days'>
+<!ENTITY staff.circ.offline_checkout.date_helper.7_days 'Today + 7 days'>
+<!ENTITY staff.circ.offline_checkout.date_helper.14_days 'Today + 14 days'>
+<!ENTITY staff.circ.offline_checkout.date_helper.30_days 'Today + 30 days'>
+<!ENTITY staff.circ.offline_checkout.strict_barcode.label 'Check barcode?'>
 <!ENTITY staff.circ.checkin.caption 'Check In'>
 <!ENTITY staff.circ.checkin.scan_label 'Enter Barcode:'>
 <!ENTITY staff.circ.checkin.scan_label.accesskey 'a'>
