diff --git a/en.pm b/en.pm
new file mode 100644
index 0000000..f0eab7a
--- /dev/null
+++ b/en.pm
@@ -0,0 +1,1533 @@
+#!/usr/bin/perl
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+
+\$generalInfo
+
+\${h2("Failures that need attention")}
+
+
+Perhaps the BackupPC server is not running or there is a configuration error.
+Please report this to your Sys Admin.
+EOF
+
+$Lang{Admin_Start_Server} = <
+Do you want to start it?
+
+
+
+EOF
+
+# -----
+
+$Lang{H_BackupPC_Server_Status} = "BackupPC Server Status";
+
+$Lang{BackupPC_Server_Status_General_Info}= <
+
+
+EOF
+
+$Lang{BackupPC_Server_Status} = <
+
+
+
+\$jobStr
+ Host
+ Type
+ User
+ Start Time
+ Command
+ PID
+ Xfer PID
+ Status
+ Count
+
+
+EOF
+
+# --------------------------------
+$Lang{BackupPC__Server_Summary} = "BackupPC: Host Summary";
+$Lang{BackupPC__Archive} = "BackupPC: Archive";
+$Lang{BackupPC_Summary} = <
+\$statusStr
+ Host
+ Type
+ User
+ Last Try
+ Details
+ Error Time
+ Last error (other than no ping)
+
+
+There are \$hostCntGood hosts that have been backed up, for a total of: +
Host | +User | +Comment | +#Full | +Full Age (days) | +Full Size (GiB) | +Speed (MiB/s) | +#Incr | +Incr Age (days) | +Last Backup (days) | +State | +#Xfer errs | +Last attempt |
+There are \$hostCntNone hosts with no backups. +
+
Host | +User | +Comment | +#Full | +Full Age (days) | +Full Size (GiB) | +Speed (MiB/s) | +#Incr | +Incr Age/days | +Last Backup (days) | +State | +#Xfer errs | +Last attempt |
+
+
+
+EOF
+
+$Lang{BackupPC_Archive2} = <
+You have three choices for restoring these files/directories. +Please select one of the following options. +
+\${h2("Option 1: Direct Restore")} +
+EOF
+
+$Lang{Restore_Options_for__host_Option1} = <
+Warning: any existing files that match the ones you have +selected will be overwritten! +
+Restore the files to host | ++ + + | +
Restore the files to share | ++ |
Restore the files below dir (relative to share) |
+ + |
+ |
+You can download a Zip archive containing all the files/directories you have +selected. You can then use a local application, such as WinZip, +to view or extract any of the files. +
+Warning: depending upon which files/directories you have selected, +this archive might be very very large. It might take many minutes to +create and transfer the archive, and you will need enough local disk +space to store it. +
+Compression (0=off, 1=fast,...,9=best) | ++ |
Code page (e.g. cp866) | ++ |
+Archive::Zip is not installed so you will not be able to download a +zip archive. +Please ask your system adminstrator to install Archive::Zip from +www.cpan.org. +
+EOF + + +# ------------------------------ +$Lang{Option_3__Download_Zip_archive} = <+Warning: depending upon which files/directories you have selected, +this archive might be very very large. It might take many minutes to +create and transfer the archive, and you will need enough local disk +space to store it. +
++
Original file/dir | Will be restored to |
+Go back to \$hostDest home page.
+EOF
+
+$Lang{BackupPC_Archive_Reply_from_server} = <
+\$statusStr
+
+
+
+Click on the backup number to browse and restore backup files. +
+Backup# | +Type | +Filled | +Level | +Start Date | +Duration/mins | +Age/days | + \$deleteHdrStr +Server Backup Path | +
+ +\$restoreStr +
+\${h2("Xfer Error Summary")} +Backup# | +Type | +View | +#Xfer errs | +#bad files | +#bad share | +#tar errs | +
+Existing files are those already in the pool; new files are those added +to the pool. +Empty files and SMB errors aren\'t counted in the reuse and new counts. +
++ | Totals | +Existing Files | +New Files | +|||||
Backup# | +Type | +#Files | +Size/MiB | +MiB/sec | +#Files | +Size/MiB | +#Files | +Size/MiB | +
+Compression performance for files already in the pool and newly +compressed files. +
++ | Existing Files | +New Files | +||||||
Backup# | +Type | +Comp Level | +Size/MiB | +Comp/MiB | +Comp | +Size/MiB | +Comp/MiB | +Comp | +
+
+ | + |
+ + |
Backup number | \$backupNumStr
Backup time | \$backupTimeStr
Number | \$Restores[\$i]{num} |
Requested by | \$RestoreReq{user} |
Request time | \$reqTime |
Result | \$Restores[\$i]{result} |
Error Message | \$Restores[\$i]{errorMsg} |
Source host | \$RestoreReq{hostSrc} |
Source backup num | \$RestoreReq{num} |
Source share | \$RestoreReq{shareSrc} |
Destination host | \$RestoreReq{hostDest} |
Destination share | \$RestoreReq{shareDest} |
Start time | \$startTime |
Duration | \$duration min |
Number of files | \$Restores[\$i]{nFiles} |
Total size | \${MB} MiB |
Transfer rate | \$MBperSec MiB/sec |
TarCreate errors | \$Restores[\$i]{tarCreateErrs} |
Xfer errors | \$Restores[\$i]{xferErrs} |
Xfer log file | +View, +Errors + |
+
Original file/dir | Restored to |
Number | \$Archives[\$i]{num} |
Requested by | \$ArchiveReq{user} |
Request time | \$reqTime |
Result | \$Archives[\$i]{result} |
Error Message | \$Archives[\$i]{errorMsg} |
Start time | \$startTime |
Duration | \$duration min |
Xfer log file | +View, +Errors + |
+\${h1("Host list")} +
+
Host | Backup Number |
Restore# | +Result | +Start Date | +Dur/mins | +#files | +MiB | +#tar errs | +#xferErrs | +
+EOF
+
+$Lang{Archive_Summary} = <
+EOF
+
+$Lang{BackupPC__Documentation} = "BackupPC: Documentation";
+
+$Lang{No} = "no";
+$Lang{Yes} = "yes";
+
+$Lang{The_directory_is_empty} = <
+EOF
+
+$Lang{CfgEdit_Button_Save} = "Save";
+$Lang{CfgEdit_Button_Insert} = "Insert";
+$Lang{CfgEdit_Button_Delete} = "Delete";
+$Lang{CfgEdit_Button_Add} = "Add";
+$Lang{CfgEdit_Button_Override} = "Override";
+$Lang{CfgEdit_Button_New_Key} = "New Key";
+$Lang{CfgEdit_Button_New_Share} = "New ShareName or '*'";
+
+$Lang{CfgEdit_Error_No_Save}
+ = "Error: No save due to errors";
+$Lang{CfgEdit_Error__must_be_an_integer}
+ = "Error: \$var must be an integer";
+$Lang{CfgEdit_Error__must_be_real_valued_number}
+ = "Error: \$var must be a real-valued number";
+$Lang{CfgEdit_Error__entry__must_be_an_integer}
+ = "Error: \$var entry \$k must be an integer";
+$Lang{CfgEdit_Error__entry__must_be_real_valued_number}
+ = "Error: \$var entry \$k must be a real-valued number";
+$Lang{CfgEdit_Error__must_be_executable_program}
+ = "Error: \$var must be a valid executable path";
+$Lang{CfgEdit_Error__must_be_valid_option}
+ = "Error: \$var must be a valid option";
+$Lang{CfgEdit_Error_Copy_host_does_not_exist}
+ = "Copy host \$copyHost doesn't exist; creating full host name \$fullHost. Delete this host if that is not what you wanted.";
+
+$Lang{CfgEdit_Log_Copy_host_config}
+ = "\$User copied config from host \$fromHost to \$host\n";
+$Lang{CfgEdit_Log_Delete_param}
+ = "\$User deleted \$p from \$conf\n";
+$Lang{CfgEdit_Log_Add_param_value}
+ = "\$User added \$p to \$conf, set to \$value\n";
+$Lang{CfgEdit_Log_Change_param_value}
+ = "\$User changed \$p in \$conf to \$valueNew from \$valueOld\n";
+$Lang{CfgEdit_Log_Host_Delete}
+ = "\$User deleted host \$host\n";
+$Lang{CfgEdit_Log_Host_Change}
+ = "\$User host \$host changed \$key from \$valueOld to \$valueNew\n";
+$Lang{CfgEdit_Log_Host_Add}
+ = "\$User added host \$host: \$value\n";
+
+#end of lang_en.pm
+
+
+\$ArchiveStr
+ Archive#
+ Result
+ Start Date
+ Dur/mins
+The directory \$dirDisplay is empty
+
+EOF
+
+#$Lang{on} = "on";
+$Lang{off} = "off";
+
+$Lang{backupType_full} = "full";
+$Lang{backupType_incr} = "incr";
+$Lang{backupType_active} = "active";
+$Lang{backupType_partial} = "partial";
+
+$Lang{failed} = "failed";
+$Lang{success} = "success";
+$Lang{and} = "and";
+
+# ------
+# Hosts states and reasons
+$Lang{Status_idle} = "idle";
+$Lang{Status_backup_starting} = "backup starting";
+$Lang{Status_backup_in_progress} = "backup in progress";
+$Lang{Status_restore_starting} = "restore starting";
+$Lang{Status_restore_in_progress} = "restore in progress";
+$Lang{Status_admin_pending} = "link pending";
+$Lang{Status_admin_running} = "link running";
+
+$Lang{Reason_backup_done} = "done";
+$Lang{Reason_restore_done} = "restore done";
+$Lang{Reason_archive_done} = "archive done";
+$Lang{Reason_nothing_to_do} = "idle";
+$Lang{Reason_backup_failed} = "backup failed";
+$Lang{Reason_restore_failed} = "restore failed";
+$Lang{Reason_archive_failed} = "archive failed";
+$Lang{Reason_no_ping} = "no ping";
+$Lang{Reason_backup_canceled_by_user} = "backup canceled by user";
+$Lang{Reason_restore_canceled_by_user} = "restore canceled by user";
+$Lang{Reason_archive_canceled_by_user} = "archive canceled by user";
+$Lang{Disabled_OnlyManualBackups} = "auto disabled";
+$Lang{Disabled_AllBackupsDisabled} = "disabled";
+
+
+# ---------
+# Email messages
+
+# No backup ever
+$Lang{EMailNoBackupEverSubj} = "BackupPC: no backups of \$host have succeeded";
+$Lang{EMailNoBackupEverMesg} = <<'EOF';
+To: $user$domain
+cc:
+Subject: $subj
+$headers
+Dear $userName,
+
+Your PC ($host) has never been successfully backed up by our
+PC backup software. PC backups should occur automatically
+when your PC is connected to the network. You should contact
+computer support if:
+
+ - Your PC has been regularly connected to the network, meaning
+ there is some configuration or setup problem preventing
+ backups from occurring.
+
+ - You don't want your PC backed up and you want these email
+ messages to stop.
+
+Otherwise, please make sure your PC is connected to the network
+next time you are in the office.
+
+Regards,
+BackupPC Genie
+https://backuppc.github.io/backuppc
+EOF
+
+# No recent backup
+$Lang{EMailNoBackupRecentSubj} = "BackupPC: no recent backups on \$host";
+$Lang{EMailNoBackupRecentMesg} = <<'EOF';
+To: $user$domain
+cc:
+Subject: $subj
+$headers
+Dear $userName,
+
+Your PC ($host) has not been successfully backed up for $days days.
+Your PC has been correctly backed up $numBackups times from $firstTime to $days days
+ago. PC backups should occur automatically when your PC is connected
+to the network.
+
+If your PC has been connected for more than a few hours to the
+network during the last $days days you should contact IS to find
+out why backups are not working.
+
+Otherwise, if you are out of the office, there's not much you can
+do, other than manually copying especially critical files to other
+media. You should be aware that any files you have created or
+changed in the last $days days (including all new email and
+attachments) cannot be restored if your PC disk crashes.
+
+Regards,
+BackupPC Genie
+https://backuppc.github.io/backuppc
+EOF
+
+# Old Outlook files
+$Lang{EMailOutlookBackupSubj} = "BackupPC: Outlook files on \$host need to be backed up";
+$Lang{EMailOutlookBackupMesg} = <<'EOF';
+To: $user$domain
+cc:
+Subject: $subj
+$headers
+Dear $userName,
+
+The Outlook files on your PC have $howLong.
+These files contain all your email, attachments, contact and calendar
+information. Your PC has been correctly backed up $numBackups times from
+$firstTime to $lastTime days ago. However, Outlook locks all its files when
+it is running, preventing these files from being backed up.
+
+It is recommended you backup the Outlook files when you are connected
+to the network by exiting Outlook and all other applications, and,
+using just your browser, go to this link:
+
+ $CgiURL?host=$host
+
+Select "Start Incr Backup" twice to start a new incremental backup.
+You can select "Return to $host page" and then hit "reload" to check
+the status of the backup. It should take just a few minutes to
+complete.
+
+Regards,
+BackupPC Genie
+https://backuppc.github.io/backuppc
+EOF
+
+$Lang{howLong_not_been_backed_up} = "not been backed up successfully";
+$Lang{howLong_not_been_backed_up_for_days_days} = "not been backed up for \$days days";
+
+#######################################################################
+# RSS strings
+#######################################################################
+$Lang{RSS_Doc_Title} = "BackupPC Server";
+$Lang{RSS_Doc_Description} = "RSS feed for BackupPC";
+$Lang{RSS_Host_Summary} = <