diff --git a/hfs.dproj b/hfs.dproj index 2270283..fa8e08c 100644 --- a/hfs.dproj +++ b/hfs.dproj @@ -206,6 +206,12 @@ False + + + hfs.exe + true + + hfs.exe @@ -225,12 +231,6 @@ true - - - hfs.exe - true - - 1 diff --git a/hfs.drc b/hfs.drc index 5136926..983b646 100644 --- a/hfs.drc +++ b/hfs.drc @@ -8,133 +8,174 @@ resources were bound to the produced executable. */ -#define main_CAPTION 64800 -#define main_MSG 64801 -#define main_REMOVE_SHELL 64802 -#define main_S_OFF 64803 -#define main_S_ON 64804 -#define main_LOG 64805 -#define main_MSG 64806 -#define main_MSG 64807 -#define main_MSG2 64808 -#define main_MSG 64809 -#define main_MSG2 64810 -#define main_MSG 64811 -#define main_MSG 64812 -#define main_MSG 64813 -#define main_MSG 64814 -#define main_MSG 64816 -#define main_MSG 64817 -#define main_MSG 64818 -#define main_MSG 64819 -#define main_MSG 64820 -#define main_MSG 64821 -#define main_MSG 64822 -#define main_MSG_BEFORE 64823 -#define main_MSG_OK 64824 -#define main_MSG_OK_PORT 64825 -#define main_MSG_3 64826 -#define main_MSG_6 64827 -#define main_MSG_7 64828 -#define main_MSG 64829 -#define main_MSG 64830 -#define main_HELP 64831 -#define main_MSG_AUTO_DISABLED 64832 -#define main_MSG_CORRUPTED 64833 -#define main_MSG_MACROS_FOUND 64834 -#define main_MSG_INFO 64835 -#define main_MSG_NEWER 64836 -#define main_ARE_EXPERT 64837 -#define main_ARE_EASY 64838 -#define main_SW2EXPERT 64839 -#define main_SW2EASY 64840 -#define main_MSG 64841 -#define main_MSG 64842 -#define main_MSG 64843 -#define main_MSG 64844 -#define main_MSG 64845 -#define main_MSG 64846 -#define main_MSG 64847 -#define main_ZEROMSG 64848 -#define main_LIMIT 64849 -#define main_MSG_MAX_BW_1 64850 -#define main_LIMIT1 64851 -#define main_NODL 64852 -#define main_MSG 64853 -#define main_MSG 64854 -#define main_MSG2 64855 -#define main_MSG 64856 -#define main_MSG2 64857 -#define main_MSG 64858 -#define main_MSG 64859 -#define main_MSG_TITLE 64860 -#define main_MSG_OLD 64861 -#define main_MSG_UNK_FK 64862 -#define main_MSG_VIS_ONLY_ANON 64863 -#define main_OUT_SPEED 64864 -#define main_IN_SPEED 64865 -#define main_BANS 64866 -#define main_MEMORY 64867 -#define main_CUSTOMIZED 64868 -#define main_ITEMS 64869 -#define main_MSG1 64870 -#define main_MSG 64871 -#define main_MSG_BETTERSTOP 64872 -#define main_MSG_BADCRC 64873 -#define main_MSG_NEWER 64874 -#define main_MSG_ZLIB 64875 -#define main_MSG_BAKAVAILABLE 64876 -#define main_LIMIT 64877 -#define main_TOP_SPEED 64878 -#define main_MSG_MAX_BW 64879 -#define main_MSG 64880 -#define main_AUTOSAVE 64881 -#define main_MSG 64882 -#define main_MSG_MIN 64883 -#define main_MSG_BAN 64884 -#define main_MSG 64885 -#define main_MSG_SAVE_ERROR 64886 -#define main_MSG_LIMITED 64887 -#define main_MSG_UPDATE 64888 -#define main_MSG_FROMDISK 64889 -#define main_COPY 64890 -#define main_ALREADY 64891 -#define main_NOSPACE 64892 -#define main_CONN 64893 -#define main_TOT_IN 64894 -#define main_TOT_OUT 64895 -#define main_MSG_DDNS_notdonator 64896 -#define main_MSG_DDNS_badagent 64897 -#define main_MSG 64898 -#define main_MSG2 64899 -#define main_MSG 64900 -#define main_MSG2 64901 -#define main_MSG_OLD 64902 -#define main_FAILED 64903 -#define main_LIMIT 64904 -#define main_LIMIT 64905 -#define main_LIMIT 64906 -#define main_LIMIT 64907 -#define main_LIMIT 64908 -#define main_LIMIT 64909 -#define main_FINGERPRINT 64910 -#define main_NO_FINGERPRINT 64911 -#define main_MSG_EMPTY_NO_LIMIT 64912 -#define main_MSG_ADDRESSES_EXCEED 64913 -#define main_MSG_NO_TEMP 64914 -#define main_MSG_ERROR_REGISTRY 64915 -#define main_MSG_MANY_ITEMS 64916 -#define main_MSG_ADD_TO_HFS 64917 -#define main_MSG_SINGLE_INSTANCE 64918 -#define main_MSG_COMM_ERROR 64919 -#define main_MSG_DDNS_badauth 64920 -#define main_MSG_DDNS_notfqdn 64921 -#define main_MSG_DDNS_nohost 64922 -#define main_MSG_DDNS_notyours 64923 -#define main_MSG_DDNS_numhost 64924 -#define main_MSG_DDNS_abuse 64925 -#define main_MSG_DDNS_dnserr 64926 -#define main_MSG_DDNS_911 64927 +#define main_MSG_NUM_ADDR 64752 +#define main_MSG_NUM_ADDR_DL 64753 +#define main_MSG_MAX_LINES 64754 +#define main_MSG_APACHE_LOG_FMT 64755 +#define main_MSG_APACHE_LOG_FMT_LONG 64756 +#define main_MSG_MD5_WARN 64757 +#define main_MSG_AUTO_MD5 64758 +#define main_MSG_AUTO_MD5_LONG 64759 +#define main_MSG_TEST_CANC 64768 +#define main_MSG_TEST_INET 64769 +#define main_MSG_SELF_UNAV 64770 +#define main_MSG_SELF_NO_INET 64771 +#define main_MSG_SELF_NO_ANSWER 64772 +#define main_MSG_OPEN_BROW 64773 +#define main_MSG_OPEN_BROW_LONG 64774 +#define main_MSG_HIDE_PORT 64775 +#define main_MSG_EVENTS_HLP 64776 +#define main_MSG_EDIT_RES 64777 +#define main_MSG_TPL_USE_MACROS 64778 +#define main_REMOVE_SHELL 64779 +#define main_S_OFF 64780 +#define main_S_ON 64781 +#define main_LOG 64782 +#define main_MSG_RE_NOIP 64783 +#define main_MSG_HOST_FORM 64784 +#define main_MSG_MIN_SPACE 64785 +#define main_MSG_MIN_SPACE_LONG 64786 +#define main_MSG_REN_PART 64787 +#define main_MSG_REN_PART_LONG 64788 +#define main_MSG_SELF_BEFORE 64789 +#define main_MSG_SELF_OK 64790 +#define main_MSG_SELF_OK_PORT 64791 +#define main_MSG_SELF_3 64792 +#define main_MSG_SELF_6 64793 +#define main_MSG_SELF_7 64794 +#define main_MSG_RET_EXT 64795 +#define main_MSG_SELF_CANT_ON 64796 +#define main_MSG_SELF_CANT_LIST 64797 +#define main_MSG_SELF_CANT_S 64798 +#define main_MSG_SELF_ING 64799 +#define main_MSG_CHANGES_LOST 64800 +#define main_MSG_FLAG_NEW 64801 +#define main_MSG_FLAG_NEW_LONG 64802 +#define main_MSG_DONT_LOG_MASK 64803 +#define main_MSG_DONT_LOG_MASK_LONG 64804 +#define main_MSG_CUST_IP 64805 +#define main_MSG_CUST_IP_LONG 64806 +#define main_MSG_NO_EXT_IP 64807 +#define main_MSG_RESET_TOT 64808 +#define main_MSG_DISAB_FIND_EXT 64809 +#define main_MSG_ENT_URL 64810 +#define main_MSG_ENT_URL_LONG 64811 +#define main_MSG_ENT_USR 64812 +#define main_MSG_ENT_PWD 64813 +#define main_MSG_ENT_HOST 64814 +#define main_MSG_ENT_HOST_LONG 64815 +#define main_MSG_UPD_INFO 64816 +#define main_MSG_NEWER 64817 +#define main_MSG_SRC_UPD 64818 +#define main_ARE_EXPERT 64819 +#define main_ARE_EASY 64820 +#define main_SW2EXPERT 64821 +#define main_SW2EASY 64822 +#define main_MSG_DL_TIMEOUT_LONG 64823 +#define main_MSG_LOG_FILE 64824 +#define main_MSG_LOG_FILE_LONG 64825 +#define main_MSG_SET_URL 64826 +#define main_MSG_SET_URL_LONG 64827 +#define main_MSG_REALM 64828 +#define main_MSG_REALM_LONG 64829 +#define main_MSG_INACT_TIMEOUT 64830 +#define main_MSG_INACT_TIMEOUT_LONG 64831 +#define main_MSG_MAX_BW_1 64832 +#define main_MSG_GRAPH_RATE_MENU 64833 +#define main_MSG_MAX_SIM 64834 +#define main_MSG_WARN_CONN 64835 +#define main_MSG_WARN_ACT_DL 64836 +#define main_MSG_MAX_SIM_SING 64837 +#define main_MSG_MAX_SIM_DL_SING 64838 +#define main_MSG_GRAPH_RATE 64839 +#define main_MSG_TENTH_SEC 64840 +#define main_MSG_LOADING_VFS 64841 +#define main_MSG_VFS_OLD 64842 +#define main_MSG_UNK_FK 64843 +#define main_MSG_VIS_ONLY_ANON 64844 +#define main_MSG_AUTO_DISABLED 64845 +#define main_MSG_CORRUPTED 64846 +#define main_MSG_MACROS_FOUND 64847 +#define main_BANS 64848 +#define main_MEMORY 64849 +#define main_CUST_TPL 64850 +#define main_VFS_ITEMS 64851 +#define main_MSG_ITEM_EXISTS 64852 +#define main_MSG_ALLO_REF 64853 +#define main_MSG_ALLO_REF_LONG 64854 +#define main_MSG_BETTERSTOP 64855 +#define main_MSG_BADCRC 64856 +#define main_MSG_NEWER 64857 +#define main_MSG_ZLIB 64858 +#define main_MSG_BAKAVAILABLE 64859 +#define main_LIMIT 64860 +#define main_TOP_SPEED 64861 +#define main_MSG_MAX_BW 64862 +#define main_MSG_LIM0 64863 +#define main_MSG_BAN 64864 +#define main_MSG_CANT_SAVE_OPT 64865 +#define main_MSG_UPD_SAVE_ERROR 64866 +#define main_MSG_UPD_REQ_ONLY1 64867 +#define main_MSG_UPDATE 64868 +#define main_MSG_REQUESTING 64869 +#define main_MSG_CHK_UPD 64870 +#define main_MSG_CHK_UPD_FAIL 64871 +#define main_TO_CLIP 64872 +#define main_ALREADY_CLIP 64873 +#define main_MSG_NO_SPACE 64874 +#define main_CONN 64875 +#define main_TOT_IN 64876 +#define main_TOT_OUT 64877 +#define main_OUT_SPEED 64878 +#define main_IN_SPEED 64879 +#define main_MSG_CANT_OPEN_PORT 64880 +#define main_MSG_PORT_USED_BY 64881 +#define main_MSG_PORT_BLOCKED 64882 +#define main_MSG_KICK_ALL 64883 +#define main_MSG_TPL_INCOMPATIBLE 64884 +#define main_MSG_LOGIN_FAILED 64885 +#define main_FINGERPRINT 64886 +#define main_NO_FINGERPRINT 64887 +#define main_MSG_INP_COMMENT 64888 +#define main_AUTOSAVE 64889 +#define main_SECONDS 64890 +#define main_MSG_SPD_LIMIT_SING 64891 +#define main_MSG_SPD_LIMIT 64892 +#define main_MSG_AUTO_SAVE 64893 +#define main_MSG_AUTO_SAVE_LONG 64894 +#define main_MSG_MIN 64895 +#define main_MSG_SINGLE_INSTANCE 64896 +#define main_MSG_COMM_ERROR 64897 +#define main_MSG_DDNS_badauth 64898 +#define main_MSG_DDNS_notfqdn 64899 +#define main_MSG_DDNS_nohost 64900 +#define main_MSG_DDNS_notyours 64901 +#define main_MSG_DDNS_numhost 64902 +#define main_MSG_DDNS_abuse 64903 +#define main_MSG_DDNS_dnserr 64904 +#define main_MSG_DDNS_911 64905 +#define main_MSG_DDNS_notdonator 64906 +#define main_MSG_DDNS_badagent 64907 +#define main_MSG_IP_MASK 64908 +#define main_MSG_IP_MASK_LONG 64909 +#define main_MSG_KICK_ADDR 64910 +#define main_MSG_BREAK_DYN_DNS 64911 +#define main_MSG_MAX_SIM_ADDR_DL 64912 +#define main_MSG_MAX_SIM_DL_SING 64913 +#define main_MSG_MAX_SIM_DL 64914 +#define main_MSG_SET_LIMIT 64915 +#define main_MSG_UNPROTECTED_LINKS 64916 +#define main_MSG_SAME_NAME 64917 +#define main_MSG_OPTIONS_SAVED 64918 +#define main_MSG_SOME_LOCKED 64919 +#define main_MSG_ITEM_LOCKED 64920 +#define main_MSG_INVALID_VALUE 64921 +#define main_MSG_EMPTY_NO_LIMIT 64922 +#define main_MSG_ADDRESSES_EXCEED 64923 +#define main_MSG_NO_TEMP 64924 +#define main_MSG_ERROR_REGISTRY 64925 +#define main_MSG_MANY_ITEMS 64926 +#define main_MSG_ADD_TO_HFS 64927 #define JclResources_RsIntelCacheDescrF0 64928 #define JclResources_RsIntelCacheDescrF1 64929 #define JclResources_RsIntelCacheDescrFF 64930 @@ -145,12 +186,12 @@ #define main_S_PORT_LABEL 64935 #define main_S_PORT_ANY 64936 #define main_DISABLED 64937 -#define main_MSG_UNPROTECTED_LINKS 64938 -#define main_MSG_SAME_NAME 64939 -#define main_MSG_OPTIONS_SAVED 64940 -#define main_MSG_SOME_LOCKED 64941 -#define main_MSG_ITEM_LOCKED 64942 -#define main_MSG_INVALID_VALUE 64943 +#define main_S_OK 64938 +#define main_MSG_MENU_VAL 64939 +#define main_MSG_DL_TIMEOUT 64940 +#define main_MSG_MAX_CON 64941 +#define main_MSG_MAX_CON_SING 64942 +#define main_MSG_MAX_SIM_ADDR 64943 #define JclResources_RsIntelCacheDescrCA 64944 #define JclResources_RsIntelCacheDescrD0 64945 #define JclResources_RsIntelCacheDescrD1 64946 @@ -745,77 +786,101 @@ #define System_SysConst_SDiskFull 65535 STRINGTABLE BEGIN - main_CAPTION, L"Edit resource" - main_MSG, L"The current template is using macros.\rDo you want to cancel this action?" + main_MSG_NUM_ADDR, L"In this moment there are %d different addresses" + main_MSG_NUM_ADDR_DL, L"In this moment there are %d different addresses downloading" + main_MSG_MAX_LINES, L"Max lines on screen." + main_MSG_APACHE_LOG_FMT, L"Apache log file format" + main_MSG_APACHE_LOG_FMT_LONG, L"Here you can specify how to format the log file complying Apache standard.\rLeave blank to get bare copy of screen on file.\r\rExample:\r %h %l %u %t \"%r\" %>s %b" + main_MSG_MD5_WARN, L"This option creates an .md5 file for every new calculated fingerprint.\rUse with care to get not your disk invaded by these files." + main_MSG_AUTO_MD5, L"Auto fingerprint" + main_MSG_AUTO_MD5_LONG, L"When you add files and no fingerprint is found, it is calculated.\rTo avoid long waitings, set a limit to file size (in KiloBytes).\rLeave empty to disable, and have no fingerprint created." + main_MSG_TEST_CANC, L"Test cancelled" + main_MSG_TEST_INET, L"Testing internet connection..." + main_MSG_SELF_UNAV, L"Sorry, the test is unavailable at the moment" + main_MSG_SELF_NO_INET, L"Your internet connection does not work" + main_MSG_SELF_NO_ANSWER, L"The test failed: server does not answer." + main_MSG_OPEN_BROW, L"Open directly in browser" + main_MSG_OPEN_BROW_LONG, L"\"Suggest\" the browser to open directly the specified files.\rOther files should pop up a save dialog." + main_MSG_HIDE_PORT, L"You should not use this option unless you really know its meaning.\rContinue?" + main_MSG_EVENTS_HLP, L"For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts" + main_MSG_EDIT_RES, L"Edit resource" + main_MSG_TPL_USE_MACROS, L"The current template is using macros.\rDo you want to cancel this action?" main_REMOVE_SHELL, L"Remove from shell context menu" main_S_OFF, L"Switch OFF" main_S_ON, L"Switch ON" main_LOG, L"Log" - main_MSG, L"You are invited to re-insert your No-IP configuration, otherwise the updater won't work as expected." - main_MSG, L"Max simultaneous addresses." - main_MSG2, L"In this moment there are %d different addresses" - main_MSG, L"Max simultaneous addresses downloading." - main_MSG2, L"In this moment there are %d different addresses downloading" - main_MSG, L"Max lines on screen" - main_MSG, L"Here you can specify how to format the log file complying Apache standard.\rLeave blank to get bare copy of screen on file.\r\rExample:\r %h %l %u %t \"%r\" %>s %b" - main_MSG, L"This option creates an .md5 file for every new calculated fingerprint.\rUse with care to get not your disk invaded by these files." - main_MSG, L"When you add files and no fingerprint is found, it is calculated.\rTo avoid long waitings, set a limit to file size (in KiloBytes).\rLeave empty to disable, and have no fingerprint created." - main_MSG, L"Any event from the following IP address mask will be not logged." - main_MSG, L"Specify your addresses, each per line" - main_MSG, L"Can't find external address\r( %s )" - main_MSG, L"This option makes pointless the option \"Find external address at startup\", which has now been disabled for your convenience." - main_MSG, L"Enter URL for updating.\r%ip% will be translated to your external IP." - main_MSG, L"The upload will fail if your disk has less than the specified amount of free MegaBytes." - main_MSG, L"This string will be appended to the filename.\r\rIf you need more control, enter a string with %name% in it, and this symbol will be replaced by the original filename." - main_MSG_BEFORE, L"Here you can test if your server does work on the Internet.\rIf you are not interested in serving files over the Internet, this is NOT for you.\r\rWe'll now perform a test involving network activity.\rIn order to complete this test, you may need to allow HFS's activity in your firewall, by clicking Allow on the warning prompt.\r\rWARNING: for the duration of the test, all ban rules and limits on the number of connections won't apply." - main_MSG_OK, L"The test is successful. The server should be working fine." - main_MSG_OK_PORT, L"Port %s is not working, but another working port has been found and set: %s." - main_MSG_3, L"You may be behind a router or firewall." - main_MSG_6, L"You are behind a router.\rEnsure it is configured to forward port %s to your computer." - main_MSG_7, L"You may be behind a firewall.\rEnsure nothing is blocking HFS." - main_MSG, L"\"Suggest\" the browser to open directly the specified files.\rOther files should pop up a save dialog." - main_MSG, L"You should not use this option unless you really know its meaning.\rContinue?" - main_HELP, L"For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts" - main_MSG_AUTO_DISABLED, L"Because of the problems encountered in loading,\rautomatic saving has been disabled\runtil you save manually or load another one." - main_MSG_CORRUPTED, L"This file does not contain valid data." - main_MSG_MACROS_FOUND, L"!!!!!!!!! DANGER !!!!!!!!!\rThis file contains macros.\rDon't accept macros from people you don't trust.\r\rTrust this file?" - main_MSG_INFO, L"Last stable version: %s\r\rLast untested version: %s\r" + main_MSG_RE_NOIP, L"You are invited to re-insert your No-IP configuration, otherwise the updater won't work as expected." + main_MSG_HOST_FORM, L"Please, enter it in the FULL form, with dots" + main_MSG_MIN_SPACE, L"Min disk space" + main_MSG_MIN_SPACE_LONG, L"The upload will fail if your disk has less than the specified amount of free MegaBytes." + main_MSG_REN_PART, L"Rename partial uploads" + main_MSG_REN_PART_LONG, L"This string will be appended to the filename.\r\rIf you need more control, enter a string with %name% in it, and this symbol will be replaced by the original filename." + main_MSG_SELF_BEFORE, L"Here you can test if your server does work on the Internet.\rIf you are not interested in serving files over the Internet, this is NOT for you.\r\rWe'll now perform a test involving network activity.\rIn order to complete this test, you may need to allow HFS's activity in your firewall, by clicking Allow on the warning prompt.\r\rWARNING: for the duration of the test, all ban rules and limits on the number of connections won't apply." + main_MSG_SELF_OK, L"The test is successful. The server should be working fine." + main_MSG_SELF_OK_PORT, L"Port %s is not working, but another working port has been found and set: %s." + main_MSG_SELF_3, L"You may be behind a router or firewall." + main_MSG_SELF_6, L"You are behind a router.\rEnsure it is configured to forward port %s to your computer." + main_MSG_SELF_7, L"You may be behind a firewall.\rEnsure nothing is blocking HFS." + main_MSG_RET_EXT, L"Retrieving external address..." + main_MSG_SELF_CANT_ON, L"Unable to switch the server on" + main_MSG_SELF_CANT_LIST, L"Self test cannot be performed because HFS was configured to accept connections only on 127.0.0.1" + main_MSG_SELF_CANT_S, L"Self test doesn't support HTTPS.\rIt's likely it won't work." + main_MSG_SELF_ING, L"Self testing..." + main_MSG_CHANGES_LOST, L"All changes will be lost\rContinue?" + main_MSG_FLAG_NEW, L"Flag new files" + main_MSG_FLAG_NEW_LONG, L"Enter the number of MINUTES files stay flagged from their addition.\rLeave blank to disable." + main_MSG_DONT_LOG_MASK, L"Do not log address" + main_MSG_DONT_LOG_MASK_LONG, L"Any event from the following IP address mask will be not logged." + main_MSG_CUST_IP, L"Custom IP addresses" + main_MSG_CUST_IP_LONG, L"Specify your addresses, each per line" + main_MSG_NO_EXT_IP, L"Can't find external address\r( %s )" + main_MSG_RESET_TOT, L"Do you want to reset total in/out?" + main_MSG_DISAB_FIND_EXT, L"This option makes pointless the option \"Find external address at startup\", which has now been disabled for your convenience." + main_MSG_ENT_URL, L"Enter URL" + main_MSG_ENT_URL_LONG, L"Enter URL for updating.\r%ip% will be translated to your external IP." + main_MSG_ENT_USR, L"Enter user" + main_MSG_ENT_PWD, L"Enter password" + main_MSG_ENT_HOST, L"Enter host" + main_MSG_ENT_HOST_LONG, L"Enter domain (full form!)" + main_MSG_UPD_INFO, L"Last stable version: %s\r\rLast untested version: %s\r" main_MSG_NEWER, L"There's a new version available online: %s" + main_MSG_SRC_UPD, L"Searching for updates..." main_ARE_EXPERT, L"You are in Expert mode" main_ARE_EASY, L"You are in Easy mode" main_SW2EXPERT, L"Switch to Expert mode" main_SW2EASY, L"Switch to Easy mode" - main_MSG, L"Enter the number of MINUTES with no download after which the program automatically shuts down.\rLeave blank to get no timeout." - main_MSG, L"This function does not save any previous information to the log file.\rInstead, it saves all information that appears in the log box in real-time (from when you click \"OK\", below).\rSpecify a filename for the log.\rIf you leave the filename blank, no log file is saved.\r\rHere are some symbols you can use in the filename to split the log:\r %d% -- day of the month (1..31)\r %m% -- month (1..12)\r %y% -- year (2000..)\r %dow% -- day of the week (0..6)\r %w% -- week of the year (1..53)\r %user% -- username surrounded by parenthesis" - main_MSG, L"Please insert an URL for the link\r\rDo not forget to specify http:// or whatever.\r%%ip%% will be translated to your address" - main_MSG, L"The realm string is shown on the user/pass dialog of the browser.\rHere you can customize the realm for the login button" - main_MSG, L"The connection is kicked after a timeout.\rSpecify in seconds.\rLeave blank to get no timeout." - main_MSG, L"All changes will be lost\rContinue?" - main_MSG, L"Enter the number of MINUTES files stay flagged from their addition.\rLeave blank to disable." - main_ZEROMSG, L"Zero is an effective limit.\rTo disable instead, leave empty." - main_LIMIT, L"Speed limit" + main_MSG_DL_TIMEOUT_LONG, L"Enter the number of MINUTES with no download after which the program automatically shuts down.\rLeave blank to get no timeout." + main_MSG_LOG_FILE, L"Log file" + main_MSG_LOG_FILE_LONG, L"This function does not save any previous information to the log file.\rInstead, it saves all information that appears in the log box in real-time (from when you click \"OK\", below).\rSpecify a filename for the log.\rIf you leave the filename blank, no log file is saved.\r\rHere are some symbols you can use in the filename to split the log:\r %d% -- day of the month (1..31)\r %m% -- month (1..12)\r %y% -- year (2000..)\r %dow% -- day of the week (0..6)\r %w% -- week of the year (1..53)\r %user% -- username surrounded by parenthesis" + main_MSG_SET_URL, L"Set URL" + main_MSG_SET_URL_LONG, L"Please insert an URL for the link\r\rDo not forget to specify http:// or whatever.\r%%ip%% will be translated to your address" + main_MSG_REALM, L"Login realm" + main_MSG_REALM_LONG, L"The realm string is shown on the user/pass dialog of the browser.\rHere you can customize the realm for the login button" + main_MSG_INACT_TIMEOUT, L"Connection inactivity timeout" + main_MSG_INACT_TIMEOUT_LONG, L"The connection is kicked after a timeout.\rSpecify in seconds.\rLeave blank to get no timeout." main_MSG_MAX_BW_1, L"Max bandwidth for single address (KB/s)." - main_LIMIT1, L"Speed limit for single address" - main_NODL, L"No downloads timeout: " - main_MSG, L"Graph refresh rate: %d (tenths of second)" - main_MSG, L"Max simultaneous connections to serve.\rMost people don't know this function well, and have problems. If you are unsure, please use the \"Max simultaneous downloads\"." - main_MSG2, L"In this moment there are %d active connections" - main_MSG, L"Max simultaneous downloads." - main_MSG2, L"In this moment there are %d active downloads" - main_MSG, L"Max simultaneous connections to accept from a single IP address.\rMost people don't know this function well, and have problems. If you are unsure, please use the \"Max simultaneous downloads from a single IP address\"." - main_MSG, L"Max simultaneous downloads from a single IP address." - main_MSG_TITLE, L"Loading VFS" - main_MSG_OLD, L"This file is old and uses different settings.\rThe \"let browse\" folder option will be reset.\rRe-saving the file will update its format." + main_MSG_GRAPH_RATE_MENU, L"Graph refresh rate: %d (tenths of second)" + main_MSG_MAX_SIM, L"Max simultaneous connections to serve.\rMost people don't know this function well, and have problems. If you are unsure, please use the \"Max simultaneous downloads\"." + main_MSG_WARN_CONN, L"In this moment there are %d active connections" + main_MSG_WARN_ACT_DL, L"In this moment there are %d active downloads" + main_MSG_MAX_SIM_SING, L"Max simultaneous connections to accept from a single IP address.\rMost people don't know this function well, and have problems. If you are unsure, please use the \"Max simultaneous downloads from a single IP address\"." + main_MSG_MAX_SIM_DL_SING, L"Max simultaneous downloads from a single IP address." + main_MSG_GRAPH_RATE, L"Graph refresh rate" + main_MSG_TENTH_SEC, L"Tenths of second" + main_MSG_LOADING_VFS, L"Loading VFS" + main_MSG_VFS_OLD, L"This file is old and uses different settings.\rThe \"let browse\" folder option will be reset.\rRe-saving the file will update its format." main_MSG_UNK_FK, L"This file has been created with a newer version.\rSome data was discarded because unknown.\rIf you save the file now, the discarded data will NOT be saved." main_MSG_VIS_ONLY_ANON, L"This VFS file uses the \"Visible only to anonymous users\" feature.\rThis feature is not available anymore.\rYou can achieve similar results by restricting access to @anonymous,\rthen enabling \"List protected items only for allowed users\"." - main_OUT_SPEED, L"Out: %.1f KB/s" - main_IN_SPEED, L"In: %.1f KB/s" + main_MSG_AUTO_DISABLED, L"Because of the problems encountered in loading,\rautomatic saving has been disabled\runtil you save manually or load another one." + main_MSG_CORRUPTED, L"This file does not contain valid data." + main_MSG_MACROS_FOUND, L"!!!!!!!!! DANGER !!!!!!!!!\rThis file contains macros.\rDon't accept macros from people you don't trust.\r\rTrust this file?" main_BANS, L"Ban rules: %d" main_MEMORY, L"Mem" - main_CUSTOMIZED, L"Customized template" - main_ITEMS, L"VFS: %d items" - main_MSG1, L"%s item(s) already exists:\r%s\r\rContinue?" - main_MSG, L"Leave empty to disable this feature.\rHere you can specify a mask.\rWhen a file is requested, if the mask doesn't match the \"Referer\" HTTP field, the request is rejected." + main_CUST_TPL, L"Customized template" + main_VFS_ITEMS, L"VFS: %d items" + main_MSG_ITEM_EXISTS, L"%s item(s) already exists:\r%s\r\rContinue?" + main_MSG_ALLO_REF, L"Allowed referer" + main_MSG_ALLO_REF_LONG, L"Leave empty to disable this feature.\rHere you can specify a mask.\rWhen a file is requested, if the mask doesn't match the \"Referer\" HTTP field, the request is rejected." main_MSG_BETTERSTOP, L"\rGoing on may lead to problems.\rIt is adviced to stop loading.\rStop?" main_MSG_BADCRC, L"This file is corrupted (CRC)." main_MSG_NEWER, L"This file has been created with a newer and incompatible version." @@ -824,44 +889,39 @@ BEGIN main_LIMIT, L"Limit" main_TOP_SPEED, L"Top speed" main_MSG_MAX_BW, L"Max bandwidth (KB/s)." - main_MSG, L"Please insert a comment for \"%s\".\rYou should use HTML:
for break line." - main_AUTOSAVE, L"Auto save every: " - main_MSG, L"Auto-save %s.\rSpecify in seconds.\rLeave blank to disable." - main_MSG_MIN, L"We don't accept less than %d" + main_MSG_LIM0, L"Zero is an effective limit.\rTo disable instead, leave empty." main_MSG_BAN, L"Your ban configuration may have been screwed up.\rPlease verify it." - main_MSG, L"Can't save options there.\rShould I try to save to user registry?" - main_MSG_SAVE_ERROR, L"Cannot save the update" - main_MSG_LIMITED, L"The auto-update feature cannot work because it requires the \"Only 1 instance\" option enabled.\r\rYour browser will now be pointed to the update, so you can install it manually." + main_MSG_CANT_SAVE_OPT, L"Can't save options there.\rShould I try to save to user registry?" + main_MSG_UPD_SAVE_ERROR, L"Cannot save the update" + main_MSG_UPD_REQ_ONLY1, L"The auto-update feature cannot work because it requires the \"Only 1 instance\" option enabled.\r\rYour browser will now be pointed to the update, so you can install it manually." main_MSG_UPDATE, L"You are invited to use the new version.\r\rUpdate now?" - main_MSG_FROMDISK, L"Update info has been read from local file.\rTo resume normal operation of the updater, delete the file hfs.updateinfo.txt from the HFS program folder." - main_COPY, L"Copy to clipboard" - main_ALREADY, L"Already in clipboard" - main_NOSPACE, L"Out of space" + main_MSG_REQUESTING, L"Requesting..." + main_MSG_CHK_UPD, L"Checking for updates" + main_MSG_CHK_UPD_FAIL, L"Check update: failed" + main_TO_CLIP, L"Copy to clipboard" + main_ALREADY_CLIP, L"Already in clipboard" + main_MSG_NO_SPACE, L"Out of space" main_CONN, L"Connections: %d" main_TOT_IN, L"Total In: %s" main_TOT_OUT, L"Total Out: %s" - main_MSG_DDNS_notdonator, L"an option specified requires payment" - main_MSG_DDNS_badagent, L"banned client" - main_MSG, L"There are %d open connections from this address.\rDo you want to kick them all now?" - main_MSG2, L"You can edit the address.\rMasks and ranges are allowed." - main_MSG, L"This option is NOT compatible with \"dynamic dns updater\".\rContinue?" - main_MSG2, L"There are %d connections open.\rDo you want to close them now?" - main_MSG_OLD, L"The template you are trying to load is not compatible with current HFS version.\rHFS will now use default template.\rAsk on the forum if you need further help." - main_FAILED, L"Login failed" - main_LIMIT, L"Max simultaneous addresses: %s ..." - main_LIMIT, L"Max simultaneous addresses downloading: %s ..." - main_LIMIT, L"Max connections: %s ..." - main_LIMIT, L"Max connections from single address: %s ..." - main_LIMIT, L"Max simultaneous downloads: %s ..." - main_LIMIT, L"Max simultaneous downloads from single address: %s ..." + main_OUT_SPEED, L"Out: %.1f KB/s" + main_IN_SPEED, L"In: %.1f KB/s" + main_MSG_CANT_OPEN_PORT, L"Cannot open port." + main_MSG_PORT_USED_BY, L"It is already used by %s" + main_MSG_PORT_BLOCKED, L"Something is blocking, maybe your system firewall." + main_MSG_KICK_ALL, L"There are %d connections open.\rDo you want to close them now?" + main_MSG_TPL_INCOMPATIBLE, L"The template you are trying to load is not compatible with current HFS version.\rHFS will now use default template.\rAsk on the forum if you need further help." + main_MSG_LOGIN_FAILED, L"Login failed" main_FINGERPRINT, L"Create fingerprint on addition under %d KB" main_NO_FINGERPRINT, L"Create fingerprint on addition: disabled" - main_MSG_EMPTY_NO_LIMIT, L"Leave blank to get no limits." - main_MSG_ADDRESSES_EXCEED, L"The following addresses exceed the limit:\r%s" - main_MSG_NO_TEMP, L"Cannot save temporary file" - main_MSG_ERROR_REGISTRY, L"Can't write to registry.\rYou may lack necessary rights." - main_MSG_MANY_ITEMS, L"You are putting many files.\rTry using real folders instead of virtual folders.\rRead documentation or ask on the forum for help." - main_MSG_ADD_TO_HFS, L"\"Add to HFS\" has been added to your Window's Explorer right-click menu." + main_MSG_INP_COMMENT, L"Please insert a comment for \"%s\".\rYou should use HTML:
for break line." + main_AUTOSAVE, L"Auto save every: " + main_SECONDS, L"%d seconds" + main_MSG_SPD_LIMIT_SING, L"Speed limit for single address" + main_MSG_SPD_LIMIT, L"Speed limit" + main_MSG_AUTO_SAVE, L"Auto-save %s" + main_MSG_AUTO_SAVE_LONG, L"Auto-save %s.\rSpecify in seconds.\rLeave blank to disable." + main_MSG_MIN, L"We don't accept less than %d" main_MSG_SINGLE_INSTANCE, L"Sorry, this feature only works with the \"Only 1 instance\" option enabled.\r\rYou can find this option under Menu -> Start/Exit\r(only in expert mode)" main_MSG_COMM_ERROR, L"Network error. Request failed." main_MSG_DDNS_badauth, L"invalid user/password" @@ -872,6 +932,28 @@ BEGIN main_MSG_DDNS_abuse, L"specified hostname is blocked for update abuse" main_MSG_DDNS_dnserr, L"server error" main_MSG_DDNS_911, L"server error" + main_MSG_DDNS_notdonator, L"an option specified requires payment" + main_MSG_DDNS_badagent, L"banned client" + main_MSG_IP_MASK, L"IP mask" + main_MSG_IP_MASK_LONG, L"You can edit the address.\rMasks and ranges are allowed." + main_MSG_KICK_ADDR, L"There are %d open connections from this address.\rDo you want to kick them all now?" + main_MSG_BREAK_DYN_DNS, L"This option is NOT compatible with \"dynamic dns updater\".\rContinue?" + main_MSG_MAX_SIM_ADDR_DL, L"Max simultaneous addresses downloading" + main_MSG_MAX_SIM_DL_SING, L"Max simultaneous downloads from single address" + main_MSG_MAX_SIM_DL, L"Max simultaneous downloads" + main_MSG_SET_LIMIT, L"Set limit" + main_MSG_UNPROTECTED_LINKS, L"Links are NOT actually protected.\rThe feature is there to be used with the \"list protected items only...\" option.\rContinue?" + main_MSG_SAME_NAME, L"An item with the same name is already present in this folder.\rContinue?" + main_MSG_OPTIONS_SAVED, L"Options saved" + main_MSG_SOME_LOCKED, L"Some items were not affected because locked" + main_MSG_ITEM_LOCKED, L"The item is locked" + main_MSG_INVALID_VALUE, L"Invalid value" + main_MSG_EMPTY_NO_LIMIT, L"Leave blank to get no limits." + main_MSG_ADDRESSES_EXCEED, L"The following addresses exceed the limit:\r%s" + main_MSG_NO_TEMP, L"Cannot save temporary file" + main_MSG_ERROR_REGISTRY, L"Can't write to registry.\rYou may lack necessary rights." + main_MSG_MANY_ITEMS, L"You are putting many files.\rTry using real folders instead of virtual folders.\rRead documentation or ask on the forum for help." + main_MSG_ADD_TO_HFS, L"\"Add to HFS\" has been added to your Window's Explorer right-click menu." JclResources_RsIntelCacheDescrF0, L"64-Byte Prefetching" JclResources_RsIntelCacheDescrF1, L"128-Byte Prefetching" JclResources_RsIntelCacheDescrFF, L"CPUID leaf 2 does not report cache descriptor information, use CPUID leaf 4 to query cache parameters" @@ -882,12 +964,12 @@ BEGIN main_S_PORT_LABEL, L"Port: %s" main_S_PORT_ANY, L"any" main_DISABLED, L"disabled" - main_MSG_UNPROTECTED_LINKS, L"Links are NOT actually protected.\rThe feature is there to be used with the \"list protected items only...\" option.\rContinue?" - main_MSG_SAME_NAME, L"An item with the same name is already present in this folder.\rContinue?" - main_MSG_OPTIONS_SAVED, L"Options saved" - main_MSG_SOME_LOCKED, L"Some items were not affected because locked" - main_MSG_ITEM_LOCKED, L"The item is locked" - main_MSG_INVALID_VALUE, L"Invalid value" + main_S_OK, L"Ok" + main_MSG_MENU_VAL, L" (%s)" + main_MSG_DL_TIMEOUT, L"No downloads timeout" + main_MSG_MAX_CON, L"Max connections" + main_MSG_MAX_CON_SING, L"Max connections from single address" + main_MSG_MAX_SIM_ADDR, L"Max simultaneous addresses" JclResources_RsIntelCacheDescrCA, L"Shared 2nd-Level TLB: 4 KByte pages, 4-way associative, 512 entries" JclResources_RsIntelCacheDescrD0, L"3rd-level cache: 512 KByte, 4-way set associative, 64 byte line size" JclResources_RsIntelCacheDescrD1, L"3rd-level cache: 1 MByte, 4-way set associative, 64 byte line size" diff --git a/hfs.lng b/hfs.lng new file mode 100644 index 0000000..9a35cd1 --- /dev/null +++ b/hfs.lng @@ -0,0 +1,665 @@ +; Kryvich's Delphi Localizer Language File. +; Generated by K.D.L. Scanner, 31/05/2020 23:26:47 + +Humanize=1 +HumanizedCR=\^ +HumanizedCRLF=\+ +HumanizedLF=\#10 + +[TdiffFrm] +Caption=Customized options + +[TfilepropFrm] +Caption=filepropFrm +pages.permTab.Caption=Permissions +pages.permTab.actionTabs.newaccBtn.Caption=New account +pages.permTab.actionTabs.anyAccChk.Caption=Any account +pages.permTab.actionTabs.anonChk.Caption=Anonymous +pages.permTab.actionTabs.allBtn.Caption=All / None +pages.permTab.actionTabs.anyoneChk.Caption=Anyone +pages.permTab.actionTabs.goToAccountsBtn.Caption=Manage accounts +pages.flagsTab.Caption=Flags +pages.flagsTab.hiddenChk.Hint=Test +pages.flagsTab.hiddenChk.Caption=Hidden +pages.flagsTab.hidetreeChk.Caption=Recursively hidden +pages.flagsTab.archivableChk.Caption=Archivable +pages.flagsTab.browsableChk.Caption=Browsable +pages.flagsTab.dontlogChk.Caption=Don't log +pages.flagsTab.nodlChk.Caption=No download +pages.flagsTab.dontconsiderChk.Caption=Don't consider as download +pages.flagsTab.hideemptyChk.Caption=Auto-hide empty folders +pages.flagsTab.hideextChk.Caption=Hide file extension in listing +pages.diffTab.Caption=Diff template +pages.diffTab.difftplBox.Hint=Here you can put a partial template that will overlap the main one. +pages.commentTab.Caption=Comment +pages.maskTab.Caption=File masks +pages.maskTab.filesfilterBox.EditLabel.Caption=Files filter +pages.maskTab.foldersfilterBox.EditLabel.Caption=Folders filter +pages.maskTab.deffileBox.Hint=When a folder is browsed, the default file mask is used to find a file to serve in place of the folder page. If no file is found, the folder page is served. +pages.maskTab.deffileBox.EditLabel.Caption=Default file mask +pages.maskTab.uploadfilterBox.Hint=Uploaded files are allowed only complying with this file mask +pages.maskTab.uploadfilterBox.EditLabel.Caption=Upload filter mask +pages.maskTab.dontconsiderBox.Hint=Files matching this filemask are not considered for global downloads counter. Moreover they never get tray icon. +pages.maskTab.dontconsiderBox.EditLabel.Caption=Don't consider as download (mask) +pages.otherTab.Caption=Other +pages.otherTab.Label1.Caption=Icon +pages.otherTab.realmBox.Hint=The realm string is shown on the user/pass dialog of the browser. This realm will be used for selected files and their descendants. +pages.otherTab.realmBox.EditLabel.Caption=Realm +pages.otherTab.addiconBtn.Caption=Add new... +Panel1.okBtn.Caption=&OK +Panel1.cancelBtn.Caption=Cancel +Panel1.applyBtn.Caption=&Apply + +[TfolderKindFrm] +Caption=What kind of folder do you want? +realLbl.Caption=A real folder is faster, good for big folders +virtuaLbl.Caption=A virtual folder is easier, good for small folders +hintLbl.Caption=Not sure? Hint: most time you need real folders! +realBtn.Caption=&Real folder +virtuaBtn.Caption=&Virtual folder + +[TipsEverFrm] +Caption=Addresses ever connected +totalLbl.Caption=Total label... +resetBtn.Caption=&Reset +editBtn.Caption=&Open in editor + +[TlistSelectFrm] +Panel1.okBtn.Caption=&OK +Panel1.cancelBtn.Caption=&Cancel + +[TlonginputFrm] +Caption=longinputFrm +bottomPnl.okBtn.Caption=&OK +bottomPnl.cancelBtn.Caption=&Cancel +topPnl.msgLbl.Caption=test +inputBox.Lines.Strings=Memo1 + +[TmainFrm] +Caption=HFS ~ HTTP File Server +graphBox.Hint=Pink = Out\+Yellow = In +topToolbar.Caption=topToolbar +topToolbar.menuBtn.Hint=Hit ALT or F10 to pop it up +topToolbar.menuBtn.Caption=Menu +topToolbar.ToolButton4.Caption=ToolButton4 +topToolbar.portBtn.Caption=Port: any +topToolbar.ToolButton2.Caption=ToolButton2 +topToolbar.modeBtn.Hint=Click to switch\+F5 on keyboard +topToolbar.modeBtn.Caption=You are in Easy mode +topToolbar.ToolButton1.Caption=ToolButton1 +topToolbar.startBtn.Hint=Click to switch ON\^F4 on keyboard +topToolbar.startBtn.Caption=Server is currently OFF +topToolbar.abortBtn.Caption=Abort file addition +topToolbar.restoreCfgBtn.Caption=Restore my options +topToolbar.updateBtn.Caption=Update now +urlToolbar.browseBtn.Caption=Open in browser +urlToolbar.copyBtn.Caption=Copy to clipboard +centralPnl.logPnl.logTitle.titlePnl.Caption=Log +centralPnl.logPnl.logTitle.logToolbar.collapsedPnl.expandBtn.Hint=Expand toolbar +centralPnl.logPnl.logTitle.logToolbar.expandedPnl.openFilteredLog.Hint=Copy to editor only lines matched by the search pattern +centralPnl.logPnl.logTitle.logToolbar.expandedPnl.openLogBtn.Hint=Copy to editor +centralPnl.logPnl.logTitle.logToolbar.expandedPnl.collapseBtn.Hint=Collapse toolbar +centralPnl.logPnl.logTitle.logToolbar.expandedPnl.searchPnl.logSearchBox.Hint=Wildcards allowed +centralPnl.logPnl.logTitle.logToolbar.expandedPnl.searchPnl.logSearchBox.EditLabel.Caption=Search +centralPnl.filesPnl.Caption=filesPnl +centralPnl.filesPnl.filesTitle.Caption=Virtual File System +centralPnl.connPnl.connBox.Columns.(0).Caption=IP address +centralPnl.connPnl.connBox.Columns.(1).Caption=File +centralPnl.connPnl.connBox.Columns.(2).Caption=Status +centralPnl.connPnl.connBox.Columns.(3).Caption=Speed +centralPnl.connPnl.connBox.Columns.(4).Caption=Time left +centralPnl.connPnl.connBox.Columns.(5).Caption=Progress +filemenu.Addfiles1.Caption=Add files... +filemenu.Addfolder1.Caption=Add folder from disk... +filemenu.newfolder1.Caption=New empty folder +filemenu.Newlink1.Caption=New link +filemenu.Remove1.Caption=Remove +filemenu.Rename1.Caption=Rename +filemenu.Paste1.Caption=Paste +filemenu.Editresource1.Caption=Edit resource... +filemenu.CopyURL1.Caption=Copy URL address +filemenu.CopyURL1.Hint=just double click! +filemenu.CopyURLwithpassword1.Caption=Copy URL with password +filemenu.CopyURLwithdifferentaddress1.Caption=Copy URL with different host address +filemenu.CopyURLwithfingerprint1.Caption=Copy URL with fingerprint +filemenu.Browseit1.Caption=Browse it +filemenu.SetURL1.Caption=Set URL... +filemenu.Openit1.Caption=Open it +filemenu.Flagasnew1.Caption=Flag as new +filemenu.Resetnewflag1.Caption=Reset flag +filemenu.Setuserpass1.Caption=Set user/pass... +filemenu.Resetuserpass1.Caption=Reset user/pass +filemenu.Purge1.Caption=Purge... +filemenu.Switchtovirtual1.Caption=Change to virtual-folder +filemenu.Switchtorealfolder1.Caption=Change to real-folder +filemenu.Bindroottorealfolder1.Caption=Bind root to real-folder +filemenu.Unbindroot1.Caption=Unbind root +filemenu.Defaultpointtoaddfiles1.Caption=Default point to add files +filemenu.Properties1.Caption=Properties... +menu.SelfTest1.Caption=Self Test +menu.Showbandwidthgraph1.Caption=Show bandwidth graph +menu.Otheroptions1.Caption=Other options +menu.Otheroptions1.switchMode.Caption=Switch to expert mode +menu.Otheroptions1.Accounts1.Caption=User accounts... +menu.Otheroptions1.Shellcontextmenu1.Caption=Integrate in shell context menu +menu.Otheroptions1.AutocopyURLonadditionChk.Caption=Auto-copy URL on addition +menu.Otheroptions1.alwaysontopChk.Caption=Always on top +menu.Otheroptions1.sendHFSidentifierChk.Caption=Send HFS identifier +menu.Otheroptions1.persistentconnectionsChk.Caption=Persistent connections +menu.Otheroptions1.DMbrowserTplChk.Caption=Specific HTML for download managers +menu.Otheroptions1.Graphrefreshrate1.Caption=Graph refresh rate... +menu.Otheroptions1.MIMEtypes1.Caption=MIME types... +menu.Otheroptions1.Opendirectlyinbrowser1.Caption=Open directly in browser... +menu.Otheroptions1.freeLoginChk.Caption=Accept any login for unprotected resources +menu.Otheroptions1.usecommentasrealmChk.Caption=Use comment as realm +menu.Otheroptions1.Loginrealm1.Caption=Login realm... +menu.Otheroptions1.HintsfornewcomersChk.Caption=Hints for newcomers +menu.Otheroptions1.compressedbrowsingChk.Caption=Compressed browsing +menu.Otheroptions1.modalOptionsChk.Caption=Modal dialog for options +menu.Otheroptions1.useISOdateChk.Caption=Use ISO date format +menu.Otheroptions1.browseUsingLocalhostChk.Caption=Browse using localhost +menu.Otheroptions1.enableNoDefaultChk.Caption=Enable ~nodefault +menu.Otheroptions1.preventStandbyChk.Caption=Prevent system standby on network activity +menu.Otheroptions1.Addicons1.Caption=Add icons... +menu.Otheroptions1.Changeport1.Caption=Change port... +menu.Otheroptions1.autoCommentChk.Caption=Input comment on file addition +menu.Otheroptions1.Defaultsorting1.Caption=Default sorting +menu.Otheroptions1.Defaultsorting1.Name1.Caption=Name +menu.Otheroptions1.Defaultsorting1.Extension1.Caption=Extension +menu.Otheroptions1.Defaultsorting1.Size1.Caption=Size +menu.Otheroptions1.Defaultsorting1.Time1.Caption=Time +menu.Otheroptions1.Defaultsorting1.Hits1.Caption=Hits +menu.Otheroptions1.Editeventscripts1.Caption=Edit event scripts... +menu.Otheroptions1.oemTarChk.Caption=OEM file names for TAR archives +menu.HTMLtemplate1.Caption=HTML template +menu.HTMLtemplate1.Edit1.Caption=Edit... +menu.HTMLtemplate1.Changefile1.Caption=Change file... +menu.HTMLtemplate1.Changeeditor1.Caption=Change editor... +menu.HTMLtemplate1.Restoredefault1.Caption=Restore default +menu.HTMLtemplate1.enableMacrosChk.Caption=Enable macros +menu.Upload2.Caption=Upload +menu.Upload2.Howto1.Caption=How to? +menu.Upload2.deletePartialUploadsChk.Caption=Delete partial uploads +menu.Upload2.Renamepartialuploads1.Caption=Rename partial uploads... +menu.Upload2.numberFilesOnUploadChk.Caption=Number files on upload instead of overwriting +menu.StartExit1.Caption=Start/Exit +menu.StartExit1.autocopyURLonstartChk.Caption=Auto-copy URL on start +menu.StartExit1.startminimizedChk.Caption=Start minimized +menu.StartExit1.reloadonstartupChk.Caption=Reload on startup VFS file previously open +menu.StartExit1.saveTotalsChk.Caption=Save totals +menu.StartExit1.autosaveVFSchk.Caption=Auto-save VFS on exit +menu.StartExit1.Autoclose1.Caption=Auto-close +menu.StartExit1.Autoclose1.Nodownloadtimeout1.Caption=No download timeout... +menu.StartExit1.only1instanceChk.Caption=Only 1 instance +menu.StartExit1.confirmexitChk.Caption=Confirm exit +menu.StartExit1.findExtOnStartupChk.Caption=Find external address on startup +menu.StartExit1.RunHFSwhenWindowsstarts1.Caption=Run HFS when Windows starts +menu.StartExit1.trayInsteadOfQuitChk.Caption=Minimize to tray clicking the close button [ X ] +menu.StartExit1.quitWithoutAskingToSaveChk.Caption=Force quitting (no dialogs) +menu.VirtualFileSystem1.Caption=Virtual File System +menu.VirtualFileSystem1.foldersbeforeChk.Caption=Folders before +menu.VirtualFileSystem1.linksBeforeChk.Caption=Links before +menu.VirtualFileSystem1.usesystemiconsChk.Caption=Use system icons +menu.VirtualFileSystem1.loadSingleCommentsChk.Caption=Load single comment files +menu.VirtualFileSystem1.supportDescriptionChk.Caption=Support DESCRIPT.ION +menu.VirtualFileSystem1.oemForIonChk.Caption=Use OEM for DESCRIPT.ION +menu.VirtualFileSystem1.recursiveListingChk.Caption=Enable recursive listing +menu.VirtualFileSystem1.deleteDontAskChk.Caption=Skip confirmation on deletion +menu.VirtualFileSystem1.listfileswithhiddenattributeChk.Caption=List files with attribute +menu.VirtualFileSystem1.listfileswithsystemattributeChk.Caption=List files with attribute +menu.VirtualFileSystem1.hideProtectedItemsChk.Caption=List protected items only for allowed users +menu.VirtualFileSystem1.Iconmasks1.Caption=Icon masks... +menu.VirtualFileSystem1.Flagfilesaddedrecently1.Caption=Flag files added recently... +menu.VirtualFileSystem1.Autosaveevery1.Caption=Auto-save every... +menu.VirtualFileSystem1.backupSavingChk.Caption=Backup on save +menu.VirtualFileSystem1.Addingfolder1.Caption=Adding folder +menu.VirtualFileSystem1.Addingfolder1.askFolderKindChk.Caption=Ask +menu.VirtualFileSystem1.Addingfolder1.defaultToVirtualChk.Caption=Default to virtual-folder +menu.VirtualFileSystem1.Addingfolder1.defaultToRealChk.Caption=Default to real-folder +menu.VirtualFileSystem1.Resetfileshits1.Caption=Reset files hits +menu.VirtualFileSystem1.Resettotals1.Caption=Reset totals +menu.Limits1.Caption=Limits +menu.Limits1.Speedlimit1.Caption=Speed limit (disabled)... +menu.Limits1.Speedlimitforsingleaddress1.Caption=Speed limit for single address... +menu.Limits1.Pausestreaming1.Caption=Pause streaming +menu.Limits1.Pausestreaming1.Hint=Sets speed limit temporarily to zero +menu.Limits1.maxDLs1.Caption=Max simultaneous downloads... +menu.Limits1.maxDLsIP1.Caption=Max simultaneous downloads from single address... +menu.Limits1.maxIPs1.Caption=Max simultaneous addresses... +menu.Limits1.maxIPsDLing1.Caption=Max simultaneous addresses downloading... +menu.Limits1.Maxconnections1.Caption=Max connections... +menu.Limits1.Maxconnectionsfromsingleaddress1.Caption=Max connections from single address... +menu.Limits1.Connectionsinactivitytimeout1.Caption=Connections inactivity timeout... +menu.Limits1.BannedIPaddresses1.Caption=Bans... +menu.Limits1.Minimumdiskspace1.Caption=Minimum disk space... +menu.Limits1.preventLeechingChk.Caption=Prevent leeching (download accelerators) +menu.Limits1.Allowedreferer1.Caption=Allowed referer... +menu.Limits1.stopSpidersChk.Caption=Stop spiders +menu.Flashtaskbutton1.Caption=Flash taskbutton +menu.Flashtaskbutton1.onDownloadChk.Caption=On download +menu.Flashtaskbutton1.onconnectionChk.Caption=On connection +menu.Flashtaskbutton1.never1.Caption=Never +menu.Flashtaskbutton1.beepChk.Caption=Also beep +menu.Fingerprints1.Caption=Fingerprints +menu.Fingerprints1.fingerprintsChk.Caption=Enabled +menu.Fingerprints1.saveNewFingerprintsChk.Caption=Save new calculated fingerprints +menu.Fingerprints1.Createfingerprintonaddition1.Caption=Create fingerprint on file addition... +menu.trayicons1.Caption=Tray icons +menu.trayicons1.MinimizetotrayChk.Caption=Minimize to tray +menu.trayicons1.showmaintrayiconChk.Caption=Show main tray icon +menu.trayicons1.hetrayiconshows1.Caption=Main icon shows +menu.trayicons1.hetrayiconshows1.Numberofcurrentconnections1.Caption=Number of current connections +menu.trayicons1.hetrayiconshows1.Numberofloggeddownloads1.Caption=Number of logged downloads +menu.trayicons1.hetrayiconshows1.Numberofloggeduploads1.Caption=Number of logged uploads +menu.trayicons1.hetrayiconshows1.Numberofloggedhits1.Caption=Number of logged hits +menu.trayicons1.hetrayiconshows1.NumberofdifferentIPaddresses1.Caption=Number of different IP addresses now connected +menu.trayicons1.hetrayiconshows1.NumberofdifferentIPaddresseseverconnected1.Caption=Number of different IP addresses ever connected +menu.trayicons1.traymessage1.Caption=Tray message... +menu.trayicons1.trayfordownloadChk.Caption=Tray icon for each download +menu.IPaddress1.Caption=&IP address +menu.IPaddress1.hisIPaddressisusedforURLbuilding1.Caption=This IP address is used only for URL building +menu.IPaddress1.Custom1.Caption=Custom... +menu.IPaddress1.noPortInUrlChk.Caption=Don't include port in URL +menu.IPaddress1.Findexternaladdress1.Caption=Find external address +menu.IPaddress1.searchbetteripChk.Caption=Constantly search for better address +menu.Acceptconnectionson1.Caption=Accept connections on +menu.Acceptconnectionson1.Anyaddress1.Caption=Any address +menu.DynamicDNSupdater1.Caption=Dynamic DNS updater +menu.DynamicDNSupdater1.CJBtemplate1.Caption=CJB wizard... +menu.DynamicDNSupdater1.NoIPtemplate1.Caption=No-IP wizard... +menu.DynamicDNSupdater1.DynDNStemplate1.Caption=DynDNS wizard... +menu.DynamicDNSupdater1.Custom2.Caption=Custom... +menu.DynamicDNSupdater1.Seelastserverresponse1.Caption=See last server response... +menu.DynamicDNSupdater1.Disable1.Caption=Disable +menu.URLencoding1.Caption=URL encoding +menu.URLencoding1.encodeSpacesChk.Caption=Encode spaces +menu.URLencoding1.encodenonasciiChk.Caption=Encode non-ASCII characters +menu.URLencoding1.pwdInPagesChk.Caption=Include password in pages (for download managers) +menu.URLencoding1.httpsUrlsChk.Caption=URLs starting with https instead of http +menu.Debug1.Caption=De&bug +menu.Debug1.resetOptions1.Caption=Temporarily reset options +menu.Debug1.dumpTrafficChk.Caption=Dump traffic +menu.Debug1.Showcustomizedoptions1.Caption=Show customized options... +menu.Debug1.highSpeedChk.Caption=Experimental high speed handling +menu.Debug1.macrosLogChk.Caption=Enable macros.log +menu.Debug1.Appendmacroslog1.Caption=Append macros.log +menu.Debug1.Runscript1.Caption=Run script... +menu.Debug1.showMemUsageChk.Caption=Show memory usage +menu.Debug1.noContentdispositionChk.Caption=No Content-disposition +menu.Updates1.Caption=Updates +menu.Updates1.Checkforupdates1.Caption=Check for news/updates +menu.Updates1.updateDailyChk.Caption=Auto check every day +menu.Updates1.keepBakUpdatingChk.Caption=Keep old version +menu.Updates1.testerUpdatesChk.Caption=Updates from official to beta versions +menu.Updates1.updateAutomaticallyChk.Caption=Update automatically +menu.Updates1.delayUpdateChk.Caption=Delay update to serve last requests +menu.Updates1.Reverttopreviousversion1.Caption=Revert to previous version +menu.Donate1.Caption=Donate! +menu.Addfiles2.Caption=Add files... +menu.Addfolder2.Caption=Add folder from disk... +menu.Loadfilesystem1.Caption=Load file system... +menu.Loadrecentfiles1.Caption=Load recent files +menu.Savefilesystem1.Caption=Save file system... +menu.Clearfilesystem1.Caption=Clear file system +menu.Saveoptions1.Caption=Save options +menu.Saveoptions1.tofile1.Caption=to file +menu.Saveoptions1.toregistrycurrentuser1.Caption=to registry (current user) +menu.Saveoptions1.toregistryallusers1.Caption=to registry (all users) +menu.Saveoptions1.Clearoptionsandquit1.Caption=Clear options and quit +menu.Saveoptions1.autoSaveOptionsChk.Caption=Auto-save options +menu.Help1.Caption=Help +menu.Help1.Introduction1.Caption=Introduction +menu.Help1.Guide1.Caption=Full Guide +menu.Help1.FAQ1.Caption=F.A.Q. +menu.Weblinks1.Caption=Web links +menu.Weblinks1.Officialwebsite1.Caption=Official website +menu.Weblinks1.Forum1.Caption=Forum +menu.Weblinks1.License1.Caption=License +menu.UninstallHFS1.Caption=Uninstall HFS +menu.About1.Caption=About... +menu.SwitchON1.Caption=Switch ON +menu.Restore1.Caption=Restore +menu.Exit1.Caption=Exit +connmenu.Kickconnection1.Caption=Kick connection +connmenu.KickIPaddress1.Caption=Kick IP address +connmenu.Kickallconnections1.Caption=Kick all connections +connmenu.Kickidleconnections1.Caption=Kick idle connections +connmenu.BanIPaddress1.Caption=Ban IP address +connmenu.Pause1.Caption=Pause (download-only) +connmenu.Viewhttprequest1.Caption=View http request +connmenu.trayiconforeachdownload1.Caption=Tray icon for each download +logmenu.Logwhat1.Caption=Log what +logmenu.Logwhat1.LogtimeChk.Caption=Time +logmenu.Logwhat1.LogdateChk.Caption=Date +logmenu.Logwhat1.logBrowsingChk.Caption=Browsing +logmenu.Logwhat1.LogiconsChk.Caption=Icons +logmenu.Logwhat1.logProgressChk.Caption=Progress +logmenu.Logwhat1.logBannedChk.Caption=Banned +logmenu.Logwhat1.logOnlyServedChk.Caption=Only served requests +logmenu.Logwhat1.logOtherEventsChk.Caption=Other events +logmenu.Logwhat1.logOtherEventsChk.Hint=Like dynamic dns updating... +logmenu.Logwhat1.logconnectionsChk.Caption=Connections +logmenu.Logwhat1.logDisconnectionsChk.Caption=Disconnections +logmenu.Logwhat1.logRequestsChk.Caption=Requests +logmenu.Logwhat1.DumprequestsChk.Caption=Requests dump +logmenu.Logwhat1.logRepliesChk.Caption=Replies +logmenu.Logwhat1.logFulldownloadsChk.Caption=Full downloads +logmenu.Logwhat1.logUploadsChk.Caption=Uploads +logmenu.Logwhat1.logDeletionsChk.Caption=Deletions +logmenu.Logwhat1.logBytesreceivedChk.Caption=Bytes received +logmenu.Logwhat1.logBytessentChk.Caption=Bytes sent +logmenu.Logwhat1.logServerstartChk.Caption=Server start +logmenu.Logwhat1.logServerstopChk.Caption=Server stop +logmenu.logOnVideoChk.Caption=Log to screen +logmenu.Logfile1.Caption=Log to file... +logmenu.Maxlinesonscreen1.Caption=Max lines on screen... +logmenu.Apachelogfileformat1.Caption=Apache log file format... +logmenu.Donotlogaddress1.Caption=Do not log address... +logmenu.Dontlogsomefiles1.Caption=Do not log some files... +logmenu.Address2name1.Caption=Assign name to address... +logmenu.Font1.Caption=Font... +logmenu.tabOnLogFileChk.Caption=Tabbed instead of multi-line for the log file +logmenu.Readonly1.Caption=Read-only +logmenu.Banthisaddress1.Caption=Ban this address +logmenu.Copy1.Caption=Copy +logmenu.Clear1.Caption=Clear +logmenu.Clearandresettotals1.Caption=Clear and reset totals +logmenu.Save1.Caption=Save +logmenu.Saveas1.Caption=Save as... +logmenu.Addresseseverconnected1.Caption=Addresses ever connected... +graphMenu.Reset1.Caption=Reset +graphMenu.Hide.Caption=Hide + +[TnewuserpassFrm] +Caption=Insert the requested user/pass +userBox.EditLabel.Caption=Username +pwdBox.EditLabel.Caption=Password +pwd2Box.EditLabel.Caption=Re-type password +okBtn.Caption=&Ok +resetBtn.Caption=&Reset + +[ToptionsFrm] +Caption=Options +pageCtrl.bansPage.Caption=Bans +pageCtrl.bansPage.Panel1.addBtn.Caption=Add row +pageCtrl.bansPage.Panel1.deleteBtn.Caption=Delete row +pageCtrl.bansPage.Panel1.sortBanBtn.Caption=Sort +pageCtrl.bansPage.bansBox.TitleCaptions.Strings=IP address mask\^Comment +pageCtrl.bansPage.Panel3.noreplybanChk.Caption=Disconnect with no reply +pageCtrl.bansPage.Panel3.Button1.Caption=How to invert the logic? +pageCtrl.accountsPage.Caption=Accounts +pageCtrl.accountsPage.Label1.Caption=Account list +pageCtrl.accountsPage.Label7.Hint=You also need to right click on the folder, then restrict access +pageCtrl.accountsPage.Label7.Caption=WARNING: creating an account is not enough to protect your files... +pageCtrl.accountsPage.accountpropGrp.Caption=Account properties +pageCtrl.accountsPage.accountpropGrp.Label3.Caption=Here you can see protected resources this user can access... +pageCtrl.accountsPage.accountpropGrp.Label8.Caption=Notes +pageCtrl.accountsPage.accountpropGrp.accountenabledChk.Caption=&Enabled +pageCtrl.accountsPage.accountpropGrp.ignoreLimitsChk.Caption=&Ignore limits +pageCtrl.accountsPage.accountpropGrp.pwdBox.EditLabel.Caption=&Password +pageCtrl.accountsPage.accountpropGrp.redirBox.EditLabel.Caption{1}=After login, redirect to +pageCtrl.accountsPage.accountpropGrp.accountLinkBox.EditLabel.Caption=Member of +pageCtrl.accountsPage.accountpropGrp.groupChk.Caption=&Group +pageCtrl.accountsPage.accountpropGrp.groupsBtn.Caption=Choose... +pageCtrl.accountsPage.accountpropGrp.notesWrapChk.Caption=Wrap +pageCtrl.accountsPage.deleteaccountBtn.Caption=de&lete +pageCtrl.accountsPage.renaccountBtn.Caption=&rename +pageCtrl.accountsPage.addaccountBtn.Caption=ad&d +pageCtrl.accountsPage.upBtn.Caption=&up +pageCtrl.accountsPage.downBtn.Caption=do&wn +pageCtrl.accountsPage.sortBtn.Caption=sort +pageCtrl.mimePage.Caption=MIME types +pageCtrl.mimePage.mimeBox.TitleCaptions.Strings=File Mask\^MIME Description +pageCtrl.mimePage.Panel5.addMimeBtn.Caption=Add row +pageCtrl.mimePage.Panel5.deleteMimeBtn.Caption=Delete row +pageCtrl.mimePage.Panel5.inBrowserIfMIMEchk.Caption=Open directly in browser when MIME type is defined +pageCtrl.trayPage.Caption=Tray Message +pageCtrl.trayPage.Label2.Caption=You can customize the message in the tray icon tip. \+The message length is determined by your Windows version\+(in XP the limit is 127 characters including spaces).\+Available symbols:\+\+ %uptime% - server uptime\+ %url% - server main URL\+ %ip% - IP address set as default\+ %port% - Port on which the server is listening\+ %hits% - number of requests made to the server\+ %downloads% - number of files downloaded\+ %version% - HFS version +pageCtrl.trayPage.Label10.Caption=Preview +pageCtrl.trayPage.traymsgBox.Lines.Strings=traymsgBox +pageCtrl.a2nPage.Caption=Address2name +pageCtrl.a2nPage.Panel4.Label4.Caption=You can associate a label to an address (or many addresses). It will be used in the log. +pageCtrl.a2nPage.Panel4.deleteA2Nbtn.Caption=&Delete row +pageCtrl.a2nPage.Panel4.addA2Nbtn.Caption=Add &row +pageCtrl.a2nPage.a2nBox.TitleCaptions.Strings=Name\^IP Mask +pageCtrl.iconsPage.Caption=Icon masks +pageCtrl.iconsPage.Label5.Caption=Each line is a file-mask associated with an icon +pageCtrl.iconsPage.Label6.Caption=Icon associated +Panel2.okBtn.Caption=&OK +Panel2.applyBtn.Caption=&Apply +Panel2.cancelBtn.Caption=&Cancel + +[TpurgeFrm] +Caption=Purge options +Label1.Caption=Choose what to remove... +rmFilesChk.Caption=Non-existent files +rmRealFoldersChk.Caption=Non-existent real folders +rmEmptyFoldersChk.Caption=Empty folders +Button1.Caption=&Ok +Button2.Caption=&Cancel + +[TrunScriptFrm] +Caption=Run script +resultBox.Lines.Strings=Write your script in the external editor, then click Run.\^In this box will see the result of the script you run. +Panel1.sizeLbl.Caption=Size: 0 +Panel1.runBtn.Caption=&Run +Panel1.autorunChk.Caption=&Auto run at every saving + +[TshellExtFrm] +Caption=Option... +Panel1.Label1.Caption=Do you want HFS in your shell context menu? +Panel1.Button1.Caption=&Yes +Panel1.Button2.Caption=&No + +[ResourceStrings] +64752_main_MSG_NUM_ADDR=In this moment there are %d different addresses +64753_main_MSG_NUM_ADDR_DL=In this moment there are %d different addresses downloading +64754_main_MSG_MAX_LINES=Max lines on screen. +64755_main_MSG_APACHE_LOG_FMT=Apache log file format +64756_main_MSG_APACHE_LOG_FMT_LONG=Here you can specify how to format the log file complying Apache standard.\^Leave blank to get bare copy of screen on file.\^\^Example:\^ %h %l %u %t "%r" %>s %b +64757_main_MSG_MD5_WARN=This option creates an .md5 file for every new calculated fingerprint.\^Use with care to get not your disk invaded by these files. +64758_main_MSG_AUTO_MD5=Auto fingerprint +64759_main_MSG_AUTO_MD5_LONG=When you add files and no fingerprint is found, it is calculated.\^To avoid long waitings, set a limit to file size (in KiloBytes).\^Leave empty to disable, and have no fingerprint created. +64768_main_MSG_TEST_CANC=Test cancelled +64769_main_MSG_TEST_INET=Testing internet connection... +64770_main_MSG_SELF_UNAV=Sorry, the test is unavailable at the moment +64771_main_MSG_SELF_NO_INET=Your internet connection does not work +64772_main_MSG_SELF_NO_ANSWER=The test failed: server does not answer. +64773_main_MSG_OPEN_BROW=Open directly in browser +64774_main_MSG_OPEN_BROW_LONG="Suggest" the browser to open directly the specified files.\^Other files should pop up a save dialog. +64775_main_MSG_HIDE_PORT=You should not use this option unless you really know its meaning.\^Continue? +64776_main_MSG_EVENTS_HLP=For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts +64777_main_MSG_EDIT_RES=Edit resource +64778_main_MSG_TPL_USE_MACROS=The current template is using macros.\^Do you want to cancel this action? +64779_main_REMOVE_SHELL=Remove from shell context menu +64780_main_S_OFF=Switch OFF +64781_main_S_ON{1}=Switch ON +64782_main_LOG=Log +64783_main_MSG_RE_NOIP=You are invited to re-insert your No-IP configuration, otherwise the updater won't work as expected. +64784_main_MSG_HOST_FORM=Please, enter it in the FULL form, with dots +64785_main_MSG_MIN_SPACE=Min disk space +64786_main_MSG_MIN_SPACE_LONG=The upload will fail if your disk has less than the specified amount of free MegaBytes. +64787_main_MSG_REN_PART=Rename partial uploads +64788_main_MSG_REN_PART_LONG=This string will be appended to the filename.\^\^If you need more control, enter a string with %name% in it, and this symbol will be replaced by the original filename. +64789_main_MSG_SELF_BEFORE=Here you can test if your server does work on the Internet.\^If you are not interested in serving files over the Internet, this is NOT for you.\^\^We'll now perform a test involving network activity.\^In order to complete this test, you may need to allow HFS's activity in your firewall, by clicking Allow on the warning prompt.\^\^WARNING: for the duration of the test, all ban rules and limits on the number of connections won't apply. +64790_main_MSG_SELF_OK=The test is successful. The server should be working fine. +64791_main_MSG_SELF_OK_PORT=Port %s is not working, but another working port has been found and set: %s. +64792_main_MSG_SELF_3=You may be behind a router or firewall. +64793_main_MSG_SELF_6=You are behind a router.\^Ensure it is configured to forward port %s to your computer. +64794_main_MSG_SELF_7=You may be behind a firewall.\^Ensure nothing is blocking HFS. +64795_main_MSG_RET_EXT=Retrieving external address... +64796_main_MSG_SELF_CANT_ON=Unable to switch the server on +64797_main_MSG_SELF_CANT_LIST=Self test cannot be performed because HFS was configured to accept connections only on 127.0.0.1 +64798_main_MSG_SELF_CANT_S=Self test doesn't support HTTPS.\^It's likely it won't work. +64799_main_MSG_SELF_ING=Self testing... +64800_main_MSG_CHANGES_LOST=All changes will be lost\^Continue? +64801_main_MSG_FLAG_NEW=Flag new files +64802_main_MSG_FLAG_NEW_LONG=Enter the number of MINUTES files stay flagged from their addition.\^Leave blank to disable. +64803_main_MSG_DONT_LOG_MASK=Do not log address +64804_main_MSG_DONT_LOG_MASK_LONG=Any event from the following IP address mask will be not logged. +64805_main_MSG_CUST_IP=Custom IP addresses +64806_main_MSG_CUST_IP_LONG=Specify your addresses, each per line +64807_main_MSG_NO_EXT_IP=Can't find external address\^( %s ) +64808_main_MSG_RESET_TOT=Do you want to reset total in/out? +64809_main_MSG_DISAB_FIND_EXT=This option makes pointless the option "Find external address at startup", which has now been disabled for your convenience. +64810_main_MSG_ENT_URL=Enter URL +64811_main_MSG_ENT_URL_LONG=Enter URL for updating.\^%ip% will be translated to your external IP. +64812_main_MSG_ENT_USR=Enter user +64813_main_MSG_ENT_PWD=Enter password +64814_main_MSG_ENT_HOST=Enter host +64815_main_MSG_ENT_HOST_LONG=Enter domain (full form!) +64816_main_MSG_UPD_INFO=Last stable version: %s\^\^Last untested version: %s\^ +64817_main_MSG_NEWER=There's a new version available online: %s +64818_main_MSG_SRC_UPD=Searching for updates... +64819_main_ARE_EXPERT{1}=You are in Expert mode +64820_main_ARE_EASY=You are in Easy mode +64821_main_SW2EXPERT=Switch to Expert mode +64822_main_SW2EASY=Switch to Easy mode +64823_main_MSG_DL_TIMEOUT_LONG=Enter the number of MINUTES with no download after which the program automatically shuts down.\^Leave blank to get no timeout. +64824_main_MSG_LOG_FILE=Log file +64825_main_MSG_LOG_FILE_LONG=This function does not save any previous information to the log file.\^Instead, it saves all information that appears in the log box in real-time (from when you click "OK", below).\^Specify a filename for the log.\^If you leave the filename blank, no log file is saved.\^\^Here are some symbols you can use in the filename to split the log:\^ %d% -- day of the month (1..31)\^ %m% -- month (1..12)\^ %y% -- year (2000..)\^ %dow% -- day of the week (0..6)\^ %w% -- week of the year (1..53)\^ %user% -- username surrounded by parenthesis +64826_main_MSG_SET_URL=Set URL +64827_main_MSG_SET_URL_LONG=Please insert an URL for the link\^\^Do not forget to specify http:// or whatever.\^%%ip%% will be translated to your address +64828_main_MSG_REALM=Login realm +64829_main_MSG_REALM_LONG=The realm string is shown on the user/pass dialog of the browser.\^Here you can customize the realm for the login button +64830_main_MSG_INACT_TIMEOUT=Connection inactivity timeout +64831_main_MSG_INACT_TIMEOUT_LONG=The connection is kicked after a timeout.\^Specify in seconds.\^Leave blank to get no timeout. +64832_main_MSG_MAX_BW_1=Max bandwidth for single address (KB/s). +64833_main_MSG_GRAPH_RATE_MENU=Graph refresh rate: %d (tenths of second) +64834_main_MSG_MAX_SIM=Max simultaneous connections to serve.\^Most people don't know this function well, and have problems. If you are unsure, please use the "Max simultaneous downloads". +64835_main_MSG_WARN_CONN=In this moment there are %d active connections +64836_main_MSG_WARN_ACT_DL=In this moment there are %d active downloads +64837_main_MSG_MAX_SIM_SING=Max simultaneous connections to accept from a single IP address.\^Most people don't know this function well, and have problems. If you are unsure, please use the "Max simultaneous downloads from a single IP address". +64913_main_MSG_MAX_SIM_DL_SING{1}=Max simultaneous downloads from a single IP address. +64839_main_MSG_GRAPH_RATE{1}=Graph refresh rate +64840_main_MSG_TENTH_SEC=Tenths of second +64841_main_MSG_LOADING_VFS=Loading VFS +64842_main_MSG_VFS_OLD=This file is old and uses different settings.\^The "let browse" folder option will be reset.\^Re-saving the file will update its format. +64843_main_MSG_UNK_FK=This file has been created with a newer version.\^Some data was discarded because unknown.\^If you save the file now, the discarded data will NOT be saved. +64844_main_MSG_VIS_ONLY_ANON=This VFS file uses the "Visible only to anonymous users" feature.\^This feature is not available anymore.\^You can achieve similar results by restricting access to @anonymous,\^then enabling "List protected items only for allowed users". +64845_main_MSG_AUTO_DISABLED=Because of the problems encountered in loading,\^automatic saving has been disabled\^until you save manually or load another one. +64846_main_MSG_CORRUPTED=This file does not contain valid data. +64847_main_MSG_MACROS_FOUND=!!!!!!!!! DANGER !!!!!!!!!\^This file contains macros.\^Don't accept macros from people you don't trust.\^\^Trust this file? +64848_main_BANS=Ban rules: %d +64849_main_MEMORY=Mem +64850_main_CUST_TPL=Customized template +64851_main_VFS_ITEMS=VFS: %d items +64852_main_MSG_ITEM_EXISTS=%s item(s) already exists:\^%s\^\^Continue? +64853_main_MSG_ALLO_REF=Allowed referer +64854_main_MSG_ALLO_REF_LONG=Leave empty to disable this feature.\^Here you can specify a mask.\^When a file is requested, if the mask doesn't match the "Referer" HTTP field, the request is rejected. +64855_main_MSG_BETTERSTOP=\^Going on may lead to problems.\^It is adviced to stop loading.\^Stop? +64856_main_MSG_BADCRC=This file is corrupted (CRC). +64817_main_MSG_NEWER{1}=This file has been created with a newer and incompatible version. +64858_main_MSG_ZLIB=This file is corrupted (ZLIB). +64859_main_MSG_BAKAVAILABLE=This file is corrupted but a backup is available.\^Continue with backup? +64860_main_LIMIT{2}=Limit +64861_main_TOP_SPEED=Top speed +64862_main_MSG_MAX_BW=Max bandwidth (KB/s). +64863_main_MSG_LIM0=Zero is an effective limit.\^To disable instead, leave empty. +64864_main_MSG_BAN=Your ban configuration may have been screwed up.\^Please verify it. +64865_main_MSG_CANT_SAVE_OPT=Can't save options there.\^Should I try to save to user registry? +64866_main_MSG_UPD_SAVE_ERROR=Cannot save the update +64867_main_MSG_UPD_REQ_ONLY1=The auto-update feature cannot work because it requires the "Only 1 instance" option enabled.\^\^Your browser will now be pointed to the update, so you can install it manually. +64868_main_MSG_UPDATE=You are invited to use the new version.\^\^Update now? +64869_main_MSG_REQUESTING=Requesting... +64870_main_MSG_CHK_UPD=Checking for updates +64871_main_MSG_CHK_UPD_FAIL=Check update: failed +64872_main_TO_CLIP=Copy to clipboard +64873_main_ALREADY_CLIP=Already in clipboard +64874_main_MSG_NO_SPACE=Out of space +64875_main_CONN=Connections: %d +64876_main_TOT_IN=Total In: %s +64877_main_TOT_OUT{1}=Total Out: %s +64878_main_OUT_SPEED=Out: %.1f KB/s +64879_main_IN_SPEED=In: %.1f KB/s +64880_main_MSG_CANT_OPEN_PORT=Cannot open port. +64881_main_MSG_PORT_USED_BY=It is already used by %s +64882_main_MSG_PORT_BLOCKED=Something is blocking, maybe your system firewall. +64883_main_MSG_KICK_ALL=There are %d connections open.\^Do you want to close them now? +64884_main_MSG_TPL_INCOMPATIBLE=The template you are trying to load is not compatible with current HFS version.\^HFS will now use default template.\^Ask on the forum if you need further help. +64885_main_MSG_LOGIN_FAILED=Login failed +64886_main_FINGERPRINT=Create fingerprint on addition under %d KB +64887_main_NO_FINGERPRINT=Create fingerprint on addition: disabled +64888_main_MSG_INP_COMMENT=Please insert a comment for "%s".\^You should use HTML:
for break line. +64889_main_AUTOSAVE=Auto save every: +64890_main_SECONDS=%d seconds +64891_main_MSG_SPD_LIMIT_SING=Speed limit for single address +64892_main_MSG_SPD_LIMIT=Speed limit +64893_main_MSG_AUTO_SAVE=Auto-save %s +64894_main_MSG_AUTO_SAVE_LONG=Auto-save %s.\^Specify in seconds.\^Leave blank to disable. +64895_main_MSG_MIN=We don't accept less than %d +64896_main_MSG_SINGLE_INSTANCE=Sorry, this feature only works with the "Only 1 instance" option enabled.\^\^You can find this option under Menu -> Start/Exit\^(only in expert mode) +64897_main_MSG_COMM_ERROR=Network error. Request failed. +64898_main_MSG_DDNS_badauth=invalid user/password +64899_main_MSG_DDNS_notfqdn=incomplete hostname, required form aaa.bbb.com +64900_main_MSG_DDNS_nohost=specified hostname does not exist +64901_main_MSG_DDNS_notyours=specified hostname belongs to another username +64902_main_MSG_DDNS_numhost=too many or too few hosts found +64903_main_MSG_DDNS_abuse=specified hostname is blocked for update abuse +64904_main_MSG_DDNS_dnserr=server error +64905_main_MSG_DDNS_911=server error +64906_main_MSG_DDNS_notdonator=an option specified requires payment +64907_main_MSG_DDNS_badagent=banned client +64908_main_MSG_IP_MASK=IP mask +64909_main_MSG_IP_MASK_LONG=You can edit the address.\^Masks and ranges are allowed. +64910_main_MSG_KICK_ADDR=There are %d open connections from this address.\^Do you want to kick them all now? +64911_main_MSG_BREAK_DYN_DNS=This option is NOT compatible with "dynamic dns updater".\^Continue? +64912_main_MSG_MAX_SIM_ADDR_DL=Max simultaneous addresses downloading +64913_main_MSG_MAX_SIM_DL_SING{2}=Max simultaneous downloads from single address +64914_main_MSG_MAX_SIM_DL=Max simultaneous downloads +64915_main_MSG_SET_LIMIT=Set limit +64916_main_MSG_UNPROTECTED_LINKS=Links are NOT actually protected.\^The feature is there to be used with the "list protected items only..." option.\^Continue? +64917_main_MSG_SAME_NAME=An item with the same name is already present in this folder.\^Continue? +64918_main_MSG_OPTIONS_SAVED=Options saved +64919_main_MSG_SOME_LOCKED=Some items were not affected because locked +64920_main_MSG_ITEM_LOCKED=The item is locked +64921_main_MSG_INVALID_VALUE=Invalid value +64922_main_MSG_EMPTY_NO_LIMIT=Leave blank to get no limits. +64923_main_MSG_ADDRESSES_EXCEED=The following addresses exceed the limit:\^%s +64924_main_MSG_NO_TEMP=Cannot save temporary file +64925_main_MSG_ERROR_REGISTRY=Can't write to registry.\^You may lack necessary rights. +64926_main_MSG_MANY_ITEMS=You are putting many files.\^Try using real folders instead of virtual folders.\^Read documentation or ask on the forum for help. +64927_main_MSG_ADD_TO_HFS="Add to HFS" has been added to your Window's Explorer right-click menu. +64935_main_S_PORT_LABEL=Port: %s +64936_main_S_PORT_ANY=any +64937_main_DISABLED=disabled +64938_main_S_OK=Ok +64939_main_MSG_MENU_VAL= (%s) +64940_main_MSG_DL_TIMEOUT{1}=No downloads timeout +64941_main_MSG_MAX_CON=Max connections +64942_main_MSG_MAX_CON_SING=Max connections from single address +64943_main_MSG_MAX_SIM_ADDR{1}=Max simultaneous addresses +65046_OverbyteIcsHttpContCod_ERR_GETCODING_OVERRIDE=GetCoding must be overridden in %s +65088_OverbyteIcsCharsetUtils_sHebrewISOVisual=Hebrew (ISO-Visual) +65089_OverbyteIcsCharsetUtils_sHebrewWindows=Hebrew (Windows) +65090_OverbyteIcsCharsetUtils_sJapaneseJIS=Japanese (JIS) +65091_OverbyteIcsCharsetUtils_sKorean=Korean +65092_OverbyteIcsCharsetUtils_sKoreanEUC=Korean (EUC) +65093_OverbyteIcsCharsetUtils_sLatin9=Latin 9 (ISO) +65094_OverbyteIcsCharsetUtils_sThaiWindows=Thai (Windows) +65095_OverbyteIcsCharsetUtils_sTurkishISO=Turkish (ISO) +65096_OverbyteIcsCharsetUtils_sTurkishWindows=Turkish (Windows) +65097_OverbyteIcsCharsetUtils_sUnicodeUTF7=Unicode (UTF-7) +65098_OverbyteIcsCharsetUtils_sUnicodeUTF8=Unicode (UTF-8) +65099_OverbyteIcsCharsetUtils_sVietnameseWindows=Vietnamese (Windows) +65100_OverbyteIcsCharsetUtils_sWesternEuropeanISO=Western European (ISO) +65101_OverbyteIcsCharsetUtils_sWesternEuropeanWindows=Western European (Windows) +65104_OverbyteIcsCharsetUtils_sBalticISO=Baltic (ISO) +65105_OverbyteIcsCharsetUtils_sBalticWindows=Baltic (Windows) +65106_OverbyteIcsCharsetUtils_sCentralEuropeanISO=Central European (ISO) +65107_OverbyteIcsCharsetUtils_sCentralEuropeanWindows=Central European (Windows) +65108_OverbyteIcsCharsetUtils_sChineseTraditionalBig5=Chinese Traditional (Big5) +65109_OverbyteIcsCharsetUtils_sChineseSimplifiedGB18030=Chinese Simplified (GB18030) +65110_OverbyteIcsCharsetUtils_sChineseSimplifiedGB2312=Chinese Simplified (GB2312) +65111_OverbyteIcsCharsetUtils_sChineseSimplifiedHZ=Chinese Simplified (HZ) +65112_OverbyteIcsCharsetUtils_sCyrillicISO=Cyrillic (ISO) +65113_OverbyteIcsCharsetUtils_sCyrillicKOI8R=Cyrillic (KOI8-R) +65114_OverbyteIcsCharsetUtils_sCyrillicKOI8U=Cyrillic (KOI8-U) +65115_OverbyteIcsCharsetUtils_sCyrillicWindows=Cyrillic (Windows) +65116_OverbyteIcsCharsetUtils_sEstonianISO=Estonian (ISO) +65117_OverbyteIcsCharsetUtils_sGreekISO=Greek (ISO) +65118_OverbyteIcsCharsetUtils_sGreekWindows=Greek (Windows) +65119_OverbyteIcsCharsetUtils_sHebrewISOLogical=Hebrew (ISO-Logical) +65134_OverbyteIcsCharsetUtils_sArabicISO=Arabic (ISO) +65135_OverbyteIcsCharsetUtils_sArabicWindows=Arabic (Windows) + diff --git a/main.pas b/main.pas index 9fa503a..81b3551 100644 --- a/main.pas +++ b/main.pas @@ -36,8 +36,8 @@ uses HSlib, traylib, monoLib, progFrmLib, classesLib; const - VERSION = '2.4.0 beta8'; - VERSION_BUILD = '310'; + VERSION = '2.4.0 beta9'; + VERSION_BUILD = '311'; VERSION_STABLE = {$IFDEF STABLE } TRUE {$ELSE} FALSE {$ENDIF}; CURRENT_VFS_FORMAT :integer = 1; CRLF = #13#10; @@ -122,7 +122,17 @@ resourcestring S_PORT_LABEL = 'Port: %s'; S_PORT_ANY = 'any'; DISABLED = 'disabled'; + S_OK = 'Ok'; // messages + MSG_MENU_VAL = ' (%s)'; + MSG_DL_TIMEOUT = 'No downloads timeout'; + MSG_MAX_CON = 'Max connections'; + MSG_MAX_CON_SING = 'Max connections from single address'; + MSG_MAX_SIM_ADDR = 'Max simultaneous addresses'; + MSG_MAX_SIM_ADDR_DL = 'Max simultaneous addresses downloading'; + MSG_MAX_SIM_DL_SING = 'Max simultaneous downloads from single address'; + MSG_MAX_SIM_DL = 'Max simultaneous downloads'; + MSG_SET_LIMIT = 'Set limit'; MSG_UNPROTECTED_LINKS = 'Links are NOT actually protected.' +#13'The feature is there to be used with the "list protected items only..." option.' +#13'Continue?'; @@ -1094,9 +1104,10 @@ var globalLimiter: TspeedLimiter; ip2obj: THashedStringList; sessions: Tsessions; - addToFolder: string; // default folder where to add items from the command line - lastDialogFolder: string; // stores last for open dialog, to make it persistent - clock: integer; // program ticks (tenths of second) + cfgLoaded: boolean; // was the cfg been loaded at startup + addToFolder: string; // default folder where to add items from the command line + lastDialogFolder: string; // stores last for open dialog, to make it persistent + clock: integer; // program ticks (tenths of second) // workaround for splitters' bad behaviour lastGoodLogWidth, lastGoodConnHeight: integer; etags: THashedStringList; @@ -3345,16 +3356,17 @@ end; // getAccountList function banAddress(ip:string):boolean; resourcestring - MSG = 'There are %d open connections from this address.'#13+ - 'Do you want to kick them all now?'; - MSG2 = 'You can edit the address.'#13'Masks and ranges are allowed.'; + MSG_IP_MASK = 'IP mask'; + MSG_IP_MASK_LONG = 'You can edit the address.'#13'Masks and ranges are allowed.'; + MSG_KICK_ADDR = 'There are %d open connections from this address.' + +#13'Do you want to kick them all now?'; var i: integer; comm: string; begin result:=FALSE; mainfrm.setFocus(); -if not InputQuery('IP mask',MSG2,ip) then exit; +if not InputQuery(MSG_IP_MASK,MSG_IP_MASK_LONG,ip) then exit; for i:=0 to length(banlist)-1 do if banlist[i].ip = ip then @@ -3372,7 +3384,7 @@ banlist[i].ip:=ip; banlist[i].comment:=comm; i:=countConnectionsByIP(ip); -if (i > 0) and (msgDlg(format(MSG,[i]), MB_ICONQUESTION+MB_YESNO) = IDYES) then +if (i > 0) and (msgDlg(format(MSG_KICK_ADDR,[i]), MB_ICONQUESTION+MB_YESNO) = IDYES) then kickByIP(ip); result:=TRUE; end; // banAddress @@ -3932,12 +3944,12 @@ end; // getPage procedure TmainFrm.findExtOnStartupChkClick(Sender: TObject); resourcestring - MSG = 'This option is NOT compatible with "dynamic dns updater".' + MSG_BREAK_DYN_DNS = 'This option is NOT compatible with "dynamic dns updater".' +#13'Continue?'; begin with sender as TMenuItem do if dyndns.active and (dyndns.url > '') and checked then - checked:= msgDlg(MSG, MB_ICONWARNING+MB_YESNO) = MRYES; + checked:= msgDlg(MSG_BREAK_DYN_DNS, MB_ICONWARNING+MB_YESNO) = MRYES; end; function notModified(conn:ThttpConn; etag, ts:string):boolean; overload; @@ -4270,24 +4282,27 @@ procedure stopServer(); begin if assigned(srv) then srv.stop() end; procedure sayPortBusy(port:string); -var - fn: string; +resourcestring + MSG_CANT_OPEN_PORT = 'Cannot open port.'; + MSG_PORT_USED_BY = 'It is already used by %s'; + MSG_PORT_BLOCKED = 'Something is blocking, maybe your system firewall.'; +var fn: string; begin try fn:=extractFileName(pid2file(port2pid(port))); except fn:='' end; -msgDlg('Cannot open port.'#13+if_(fn>'', 'It is already used by '+fn, 'Something is blocking, maybe your system firewall.'), MB_ICONERROR); +msgDlg(MSG_CANT_OPEN_PORT+#13+if_(fn>'', format(MSG_PORT_USED_BY,[fn]), MSG_PORT_BLOCKED), MB_ICONERROR); end; // sayPortBusy procedure toggleServer(); resourcestring - MSG2 = 'There are %d connections open.'#13'Do you want to close them now?'; + MSG_KICK_ALL = 'There are %d connections open.'#13'Do you want to close them now?'; begin if srv.active then stopServer() else if not startServer() then sayPortBusy(srv.port); if (srv.conns.count = 0) or srv.active then exit; -if msgDLg(format(MSG2,[srv.conns.count]), MB_ICONQUESTION+MB_YESNO) = IDYES then +if msgDLg(format(MSG_KICK_ALL,[srv.conns.count]), MB_ICONQUESTION+MB_YESNO) = IDYES then kickByIP('*'); end; // toggleServer @@ -4472,7 +4487,7 @@ end; // runTplImport // returns true if template was patched function setTplText(text:string=''):boolean; resourcestring - MSG_OLD = 'The template you are trying to load is not compatible with current HFS version.' + MSG_TPL_INCOMPATIBLE = 'The template you are trying to load is not compatible with current HFS version.' +#13'HFS will now use default template.' +#13'Ask on the forum if you need further help.'; begin @@ -4486,7 +4501,7 @@ if tpl.sectionExist('unauthorized') then tpl.fullText:=''; tplFilename:=''; tplImport:=FALSE; - msgDlg(MSG_OLD, MB_ICONERROR); + msgDlg(MSG_TPL_INCOMPATIBLE, MB_ICONERROR); end; tplIsCustomized:= tpl.fullText > ''; if boolOnce(tplImport) then @@ -4735,9 +4750,9 @@ var if (maxContempDLs > 0) and (countDownloads() > maxContempDLs) or (maxContempDLsIP > 0) and (countDownloads(data.address) > maxContempDLsIP) then - data.disconnectReason:='Max simultaneous downloads' + data.disconnectReason:=MSG_MAX_SIM_DL else if (maxIPsDLing > 0) and (countIPs(TRUE) > maxIPsDLing) then - data.disconnectReason:='Max simultaneous addresses downloading' + data.disconnectReason:=MSG_MAX_SIM_ADDR_DL else if preventLeechingChk.checked and (countDownloads(data.address, '', f) > 1) then data.disconnectReason:='Leeching'; @@ -5001,7 +5016,7 @@ var t:=substr(s, lastDelimiter('\/', s)+1) else t:=s; - tar.addFile(ft.resource, s); + tar.addFile(ft.resource, t); finally freeIfTemp(ft) end; end; end; // addSelection @@ -5076,7 +5091,7 @@ var function accessGranted(forceFile:Tfile=NIL):boolean; resourcestring - FAILED = 'Login failed'; + MSG_LOGIN_FAILED = 'Login failed'; begin result:=FALSE; if assigned(forceFile) then @@ -5106,7 +5121,7 @@ var // log anyone trying to guess the password if (forceFile = NIL) and stringExists(data.user, getAccountList(TRUE, FALSE)) and logOtherEventsChk.checked then - add2log(FAILED, data); + add2log(MSG_LOGIN_FAILED, data); end; // accessGranted function isAllowedReferer():boolean; @@ -5912,39 +5927,27 @@ procedure setLimitOption(var variable:integer; newValue:integer; begin if newValue < 0 then newValue:=0; variable:=newValue; -menuItem.caption:=format(menuLabel, - [if_(newValue=0,DISABLED,intToStr(newValue))]); +menuItem.caption:=menuLabel + +format(MSG_MENU_VAL, [if_(newValue=0,DISABLED,intToStr(newValue))]); end; // setLimitOption procedure setMaxIPs(v:integer); -resourcestring - LIMIT = 'Max simultaneous addresses: %s ...'; -begin setLimitOption(maxIPs,v, mainfrm.maxIPs1, LIMIT) end; +begin setLimitOption(maxIPs,v, mainfrm.maxIPs1, MSG_MAX_SIM_ADDR) end; procedure setMaxIPsDLing(v:integer); -resourcestring - LIMIT = 'Max simultaneous addresses downloading: %s ...'; -begin setLimitOption(maxIPsDLing,v, mainfrm.maxIPsDLing1, LIMIT) end; +begin setLimitOption(maxIPsDLing,v, mainfrm.maxIPsDLing1, MSG_MAX_SIM_ADDR_DL) end; procedure setMaxConnections(v:integer); -resourcestring - LIMIT = 'Max connections: %s ...'; -begin setLimitOption(maxConnections,v, mainfrm.maxConnections1, LIMIT) end; +begin setLimitOption(maxConnections,v, mainfrm.maxConnections1, MSG_MAX_CON) end; procedure setMaxConnectionsIP(v:integer); -resourcestring - LIMIT = 'Max connections from single address: %s ...'; -begin setLimitOption(maxConnectionsIP, v, mainfrm.MaxconnectionsfromSingleaddress1, LIMIT) end; +begin setLimitOption(maxConnectionsIP, v, mainfrm.MaxconnectionsfromSingleaddress1, MSG_MAX_CON_SING) end; procedure setMaxDLs(v:integer); -resourcestring - LIMIT = 'Max simultaneous downloads: %s ...'; -begin setLimitOption(maxContempDLs, v, mainfrm.maxDLs1, LIMIT) end; +begin setLimitOption(maxContempDLs, v, mainfrm.maxDLs1, MSG_MAX_SIM_DL) end; procedure setMaxDLsIP(v:integer); -resourcestring - LIMIT = 'Max simultaneous downloads from single address: %s ...'; -begin setLimitOption(maxContempDLsIP, v, mainfrm.maxDLsIP1, LIMIT) end; +begin setLimitOption(maxContempDLsIP, v, mainfrm.maxDLsIP1, MSG_MAX_SIM_DL_SING) end; procedure setAutoFingerprint(v:integer); resourcestring @@ -6012,10 +6015,10 @@ end; // checkVfsOnQuit procedure inputComment(f:Tfile); resourcestring - MSG= 'Please insert a comment for "%s".' + MSG_INP_COMMENT= 'Please insert a comment for "%s".' +#13'You should use HTML:
for break line.'; begin -VFSmodified:=inputqueryLong('Comment', format(MSG, [f.name]), f.comment); +VFSmodified:=inputqueryLong('Comment', format(MSG_INP_COMMENT, [f.name]), f.comment); end; // inputComment function Tmainfrm.addFile(f:Tfile; parent:Ttreenode=NIL; skipComment:boolean=FALSE):Tfile; @@ -6326,11 +6329,17 @@ resourcestring begin rec.every:=v; if assigned(rec.menu) then - rec.menu.caption:= - AUTOSAVE+if_(v=0,DISABLED, format('%d seconds',[v])); + rec.menu.caption:=AUTOSAVE + if_(v=0,DISABLED, format(SECONDS,[v])); end; // setAutosave +procedure updateMenuSpeed(menu:TMenuItem; lab:string; v:Float32); +begin +menu.caption:=lab + format(MSG_MENU_VAL, [if_(v<0, DISABLED, floatToStr(v)+' KB/s' )]); +end; + procedure setSpeedLimitIP(v:real); +resourcestring + MSG_SPD_LIMIT_SING = 'Speed limit for single address'; var i, vi: integer; begin @@ -6341,20 +6350,23 @@ for i:=0 to ip2obj.Count-1 do with ip2obj.Objects[i] as TperIp do if not customizedLimiter then limiter.maxSpeed:=vi; -mainfrm.Speedlimitforsingleaddress1.Caption:='Speed limit for single address: '+if_(v<0, DISABLED, floatToStr(v)+' KB/s' ); +updateMenuSpeed(mainfrm.Speedlimitforsingleaddress1, MSG_SPD_LIMIT_SING, v); end; // setSpeedLimitIP procedure setSpeedLimit(v:real); +resourcestring + MSG_SPD_LIMIT = 'Speed limit'; begin speedLimit:=v; if v < 0 then globalLimiter.maxSpeed:=MAXINT else globalLimiter.maxSpeed:=round(v*1000); -mainfrm.speedLimit1.caption:='Speed limit: '+if_(v<0, DISABLED, floatToStr(v)+' KB/s' ); +updateMenuSpeed(mainfrm.speedLimit1, MSG_SPD_LIMIT, v); end; // setSpeedLimit procedure autosaveClick(var rec:Tautosave; name:string); resourcestring - MSG = 'Auto-save %s.' + MSG_AUTO_SAVE = 'Auto-save %s'; + MSG_AUTO_SAVE_LONG = 'Auto-save %s.' +#13'Specify in seconds.' +#13'Leave blank to disable.'; MSG_MIN = 'We don''t accept less than %d'; @@ -6365,7 +6377,7 @@ begin if rec.every <= 0 then s:='' else s:=intToStr(rec.every); repeat - if not inputquery('Auto-save '+name, format(MSG,[name]), s) then exit; + if not inputquery(format(MSG_AUTO_SAVE,[name]), format(MSG_AUTO_SAVE_LONG,[name]), s) then exit; s:=trim(s); if s = '' then begin @@ -7382,10 +7394,10 @@ function Tmainfrm.saveCFG():boolean; procedure proposeUserRegistry(); resourcestring - MSG = 'Can''t save options there.' + MSG_CANT_SAVE_OPT = 'Can''t save options there.' +#13'Should I try to save to user registry?'; begin - if msgDlg(MSG, MB_ICONERROR+MB_YESNO) = IDYES then + if msgDlg(MSG_CANT_SAVE_OPT, MB_ICONERROR+MB_YESNO) = IDYES then begin saveMode:=SM_USER; saveCFG(); @@ -7539,8 +7551,8 @@ end; // parseVersionNotice function doTheUpdate(url:string):boolean; resourcestring - MSG_SAVE_ERROR = 'Cannot save the update'; - MSG_LIMITED = 'The auto-update feature cannot work because it requires the "Only 1 instance" option enabled.' + MSG_UPD_SAVE_ERROR = 'Cannot save the update'; + MSG_UPD_REQ_ONLY1 = 'The auto-update feature cannot work because it requires the "Only 1 instance" option enabled.' +#13#13'Your browser will now be pointed to the update, so you can install it manually.'; const UPDATE_BATCH_FILE = 'hfs.update.bat'; @@ -7559,7 +7571,7 @@ begin result:=FALSE; if not mono.working then begin - msgDlg(MSG_LIMITED, MB_ICONWARNING); + msgDlg(MSG_UPD_REQ_ONLY1, MB_ICONWARNING); openURL(url); exit; end; @@ -7591,7 +7603,7 @@ try end; except if not lockTimerevent then - msgDlg(MSG_SAVE_ERROR, MB_ICONERROR); + msgDlg(MSG_UPD_SAVE_ERROR, MB_ICONERROR); exit; end; finally progFrm.hide() end; @@ -7629,10 +7641,11 @@ result:=TRUE; end; // promptForUpdating function downloadUpdateInfo():Ttpl; +resourcestring + MSG_REQUESTING = 'Requesting...'; const URL = 'http://www.rejetto.com/hfs/hfs.updateinfo.txt'; ON_DISK = 'hfs.updateinfo.txt'; -resourcestring MSG_FROMDISK = 'Update info has been read from local file.' +#13'To resume normal operation of the updater, delete the file ' +ON_DISK+' from the HFS program folder.'; @@ -7644,7 +7657,7 @@ saveTextFile(lastUpdateCheckFN, ''); fileSetAttr(lastUpdateCheckFN, faHidden); result:=NIL; -progFrm.show('Requesting...'); +progFrm.show(MSG_REQUESTING); try // this let the developer to test the parsing locally if not fileExists(ON_DISK) then @@ -7662,6 +7675,9 @@ result.fullText:=s; end; // downloadUpdateInfo procedure Tmainfrm.autoCheckUpdates(); +resourcestring + MSG_CHK_UPD = 'Checking for updates'; + MSG_CHK_UPD_FAIL = 'Check update: failed'; var info: Ttpl; updateURL, ver, build: string; @@ -7681,13 +7697,14 @@ var begin if (VERSION_STABLE and (now()-lastUpdateCheck < 1)) or (now()-lastUpdateCheck < 1/3) then exit; -setStatusBarText('Checking for updates'); +setStatusBarText(MSG_CHK_UPD); try info:=downloadUpdateInfo(); if info = NIL then begin - if logOtherEventsChk.checked then add2log('Check update: failed'); - setStatusBarText('Check update: failed'); + if logOtherEventsChk.checked then + add2log(MSG_CHK_UPD_FAIL); + setStatusBarText(MSG_CHK_UPD_FAIL); exit; end; if not thereSnew('stable') @@ -7715,14 +7732,14 @@ begin eventScripts.fullText:=loadTextFile(cfgpath+EVENTSCRIPTS_FILE) end; procedure Tmainfrm.updateCopyBtn(); resourcestring - COPY = 'Copy to clipboard'; - ALREADY = 'Already in clipboard'; + TO_CLIP = 'Copy to clipboard'; + ALREADY_CLIP = 'Already in clipboard'; var s: string; begin s:=copyBtn.caption; try - copyBtn.Caption:=if_(clipboard.asText = urlBox.text, ALREADY, COPY); + copyBtn.Caption:=if_(clipboard.asText = urlBox.text, ALREADY_CLIP, TO_CLIP); if copyBtn.caption <> s then FormResize(NIL); except end; end; // updateCopyBtn @@ -8084,7 +8101,7 @@ var procedure checkDiskSpace(); resourcestring - NOSPACE = 'Out of space'; + MSG_NO_SPACE = 'Out of space'; type Tdrive = 1..26; var @@ -8111,7 +8128,7 @@ var addString(driveLetter, driveLetters); end; if driveLetters = NIL then exit; - sbarIdxs.oos:=addPanel( NOSPACE+': '+join(',', driveLetters)); + sbarIdxs.oos:=addPanel( MSG_NO_SPACE+': '+join(',', driveLetters)); end; // checkDiskSpace function getConnectionsString():string; @@ -8133,8 +8150,8 @@ resourcestring IN_SPEED = 'In: %.1f KB/s'; BANS = 'Ban rules: %d'; MEMORY = 'Mem'; - CUSTOMIZED = 'Customized template'; - ITEMS = 'VFS: %d items'; + CUST_TPL = 'Customized template'; + VFS_ITEMS = 'VFS: %d items'; var tempText: string; begin @@ -8153,7 +8170,7 @@ if not easyMode then smartSize(outTotalOfs+srv.bytesSent)]) ); sbarIdxs.totalIn:=addPanel( format(TOT_IN,[ smartSize(inTotalOfs+srv.bytesReceived)]) ); - sbarIdxs.notSaved:=addPanel( format(ITEMS,[filesBox.items.count-1]) + sbarIdxs.notSaved:=addPanel( format(VFS_ITEMS,[filesBox.items.count-1]) +if_(VFSmodified,' - not saved') ); if not vFsmodified then sbarIdxs.notSaved:=-1; end; @@ -8165,7 +8182,7 @@ if showMemUsageChk.checked then if assigned(banlist) then sbarIdxs.banStatus:=addPanel(format(BANS, [length(banlist)])); -if tplIsCustomized then sbarIdxs.customTpl:=addPanel(CUSTOMIZED); +if tplIsCustomized then sbarIdxs.customTpl:=addPanel(CUST_TPL); // if tempText empty, ensures a final panel terminator addPanel(tempText, taLeftJustify); @@ -8382,7 +8399,7 @@ var end; // selectFolderKind resourcestring - MSG1 = '%s item(s) already exists:'#13'%s'#13#13'Continue?'; + MSG_ITEM_EXISTS = '%s item(s) already exists:'#13'%s'#13#13'Continue?'; const MAX_DUPE = 50; var @@ -8431,7 +8448,7 @@ if assigned(doubles) then filesBox.Repaint(); res:=length(doubles); s:=if_(res > MAX_DUPE, intToStr(MAX_DUPE)+'+', intToStr(res)); - s:=format(MSG1, [s, join(', ',doubles)]); + s:=format(MSG_ITEM_EXISTS, [s, join(', ',doubles)]); if msgDlg(s, MB_ICONWARNING+MB_YESNO) <> IDYES then exit; end; @@ -9189,11 +9206,12 @@ end; // addTray procedure TmainFrm.Allowedreferer1Click(Sender: TObject); resourcestring - MSG = 'Leave empty to disable this feature.' + MSG_ALLO_REF = 'Allowed referer'; + MSG_ALLO_REF_LONG = 'Leave empty to disable this feature.' +#13'Here you can specify a mask.' +#13'When a file is requested, if the mask doesn''t match the "Referer" HTTP field, the request is rejected.'; begin -inputQuery('Allowed referer', MSG, allowedReferer) +inputQuery(MSG_ALLO_REF, MSG_ALLO_REF_LONG, allowedReferer) end; // addtray @@ -9787,21 +9805,20 @@ begin setLogToolbar(TRUE) end; procedure TmainFrm.Speedlimit1Click(Sender: TObject); resourcestring MSG_MAX_BW = 'Max bandwidth (KB/s).'; - ZEROMSG = 'Zero is an effective limit.'#13'To disable instead, leave empty.'; - LIMIT = 'Speed limit'; + MSG_LIM0 = 'Zero is an effective limit.'#13'To disable instead, leave empty.'; var s: string; begin if speedLimit < 0 then s:='' else s:=floatToStr(speedLimit); -if not inputquery(LIMIT, MSG_MAX_BW+#13+MSG_EMPTY_NO_LIMIT+#13, s) then +if not inputquery(MSG_SET_LIMIT, MSG_MAX_BW+#13+MSG_EMPTY_NO_LIMIT+#13, s) then exit; try s:=trim(s); if s = '' then setSpeedLimit(-1) else setSpeedLimit(strToFloat(s)); if speedLimit = 0 then - msgDlg(ZEROMSG, MB_ICONWARNING); + msgDlg(MSG_LIM0, MB_ICONWARNING); // a manual set of speedlimit voids the pause command Pausestreaming1.Checked:=FALSE; except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; @@ -9810,13 +9827,12 @@ end; procedure TmainFrm.Speedlimitforsingleaddress1Click(Sender: TObject); resourcestring MSG_MAX_BW_1 = 'Max bandwidth for single address (KB/s).'; - LIMIT1 = 'Speed limit for single address'; var s: string; begin if speedLimitIP <= 0 then s:='' else s:=floatToStr(speedLimitIP); -if inputquery(LIMIT1, MSG_MAX_BW_1+#13+MSG_EMPTY_NO_LIMIT, s) then +if inputquery(MSG_SET_LIMIT, MSG_MAX_BW_1+#13+MSG_EMPTY_NO_LIMIT, s) then try s:=trim(s); if s = '' then setSpeedLimitIP(-1) @@ -9826,23 +9842,22 @@ if inputquery(LIMIT1, MSG_MAX_BW_1+#13+MSG_EMPTY_NO_LIMIT, s) then end; procedure Tmainfrm.setnoDownloadTimeout(v:integer); -resourcestring - NODL = 'No downloads timeout: '; begin if v < 0 then v:=0; if v <> noDownloadTimeout then lastActivityTime:=now(); noDownloadTimeout:=v; -noDownloadTimeout1.caption:=NODL+if_(v=0, DISABLED, intToStr(v) ); +noDownloadTimeout1.caption:=MSG_DL_TIMEOUT + +format(MSG_MENU_VAL, [if_(v=0, DISABLED, intToStr(v) )]); end; procedure Tmainfrm.setGraphRate(v:integer); resourcestring - MSG = 'Graph refresh rate: %d (tenths of second)'; + MSG_GRAPH_RATE_MENU = 'Graph refresh rate: %d (tenths of second)'; begin if v < 1 then v:=1; if graph.rate = v then exit; graph.rate:=v; -Graphrefreshrate1.caption:=format(MSG, [v]); +Graphrefreshrate1.caption:=format(MSG_GRAPH_RATE_MENU, [v]); // changing rate invalidates previous data fillChar(graph.samplesOut, sizeof(graph.samplesOut), 0); fillChar(graph.samplesIn, sizeof(graph.samplesIn), 0); @@ -9851,45 +9866,44 @@ end; // setGraphRate procedure TmainFrm.Maxconnections1Click(Sender: TObject); resourcestring - MSG = 'Max simultaneous connections to serve.' + MSG_MAX_SIM = 'Max simultaneous connections to serve.' +#13'Most people don''t know this function well, and have problems. If you are unsure, please use the "Max simultaneous downloads".'; - MSG2 = 'In this moment there are %d active connections'; + MSG_WARN_CONN = 'In this moment there are %d active connections'; var s: string; begin if maxConnections > 0 then s:=intToStr(maxConnections) else s:=''; -if inputquery('Max connections', MSG+#13+MSG_EMPTY_NO_LIMIT, s) then +if inputquery(MSG_SET_LIMIT, MSG_MAX_SIM+#13+MSG_EMPTY_NO_LIMIT, s) then try setMaxConnections(strToUInt(s)) except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; if (maxConnections > 0) and (srv.conns.count > maxConnections) then - msgDlg(format(MSG2, [srv.conns.count]), MB_ICONWARNING); + msgDlg(format(MSG_WARN_CONN, [srv.conns.count]), MB_ICONWARNING); end; procedure TmainFrm.maxDLs1Click(Sender: TObject); resourcestring - MSG = 'Max simultaneous downloads.'; - MSG2 = 'In this moment there are %d active downloads'; + MSG_WARN_ACT_DL = 'In this moment there are %d active downloads'; var s: string; i: integer; begin if maxContempDLs > 0 then s:=intToStr(maxContempDLs) else s:=''; -if inputquery('Max downloads', MSG+#13+MSG_EMPTY_NO_LIMIT, s) then +if inputquery(MSG_SET_LIMIT, MSG_MAX_SIM_DL+#13+MSG_EMPTY_NO_LIMIT, s) then try setMaxDLs(strToUInt(s)) except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; if maxContempDLs = 0 then exit; i:=countDownloads(); if i > maxContempDLs then - msgDlg(format(MSG2, [i]), MB_ICONWARNING); + msgDlg(format(MSG_WARN_ACT_DL, [i]), MB_ICONWARNING); end; procedure TmainFrm.Maxconnectionsfromsingleaddress1Click(Sender: TObject); resourcestring - MSG = 'Max simultaneous connections to accept from a single IP address.' + MSG_MAX_SIM_SING = 'Max simultaneous connections to accept from a single IP address.' +#13'Most people don''t know this function well, and have problems. If you are unsure, please use the "Max simultaneous downloads from a single IP address".'; var s: string; @@ -9898,7 +9912,7 @@ var begin if maxConnectionsIP > 0 then s:=intToStr(maxConnectionsIP) else s:=''; -if inputquery('Max connections by IP', MSG+#13+MSG_EMPTY_NO_LIMIT, s) then +if inputquery(MSG_SET_LIMIT, MSG_MAX_SIM_SING+#13+MSG_EMPTY_NO_LIMIT, s) then try setMaxConnectionsIP(strToUInt(s)) except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; @@ -9914,7 +9928,7 @@ end; procedure TmainFrm.MaxDLsIP1Click(Sender: TObject); resourcestring - MSG = 'Max simultaneous downloads from a single IP address.'; + MSG_MAX_SIM_DL_SING = 'Max simultaneous downloads from a single IP address.'; var s: string; addresses: TStringDynArray; @@ -9922,7 +9936,7 @@ var begin if maxContempDLsIP > 0 then s:=intToStr(maxContempDLsIP) else s:=''; -if inputquery('Max downloads by IP', MSG+#13+MSG_EMPTY_NO_LIMIT, s) then +if inputquery(MSG_SET_LIMIT, MSG_MAX_SIM_DL_SING+#13+MSG_EMPTY_NO_LIMIT, s) then try setMaxDLsIP(strToUInt(s)) except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; @@ -9990,11 +10004,14 @@ procedure TmainFrm.graphSplitterMoved(Sender: TObject); begin graph.size:=graphBox.height end; procedure TmainFrm.Graphrefreshrate1Click(Sender: TObject); +resourcestring + MSG_GRAPH_RATE = 'Graph refresh rate'; + MSG_TENTH_SEC = 'Tenths of second'; var s: string; begin s:=intToStr(graph.rate); -if inputquery('Graph refresh rate', 'Tenths of second',s) then +if inputquery(MSG_GRAPH_RATE, MSG_TENTH_SEC,s) then try s:=trim(s); if s = '' then setGraphRate(10) @@ -10135,8 +10152,8 @@ end; // updateRecentFilesMenu procedure Tmainfrm.loadVFS(fn:string); resourcestring - MSG_TITLE = 'Loading VFS'; - MSG_OLD = 'This file is old and uses different settings.' + MSG_LOADING_VFS = 'Loading VFS'; + MSG_VFS_OLD = 'This file is old and uses different settings.' +#13'The "let browse" folder option will be reset.' +#13'Re-saving the file will update its format.'; MSG_UNK_FK = 'This file has been created with a newer version.' @@ -10144,9 +10161,9 @@ resourcestring +#13'If you save the file now, the discarded data will NOT be saved.'; MSG_VIS_ONLY_ANON = 'This VFS file uses the "Visible only to anonymous users" feature.' - +#13'This feature is not available anymore.' - +#13'You can achieve similar results by restricting access to @anonymous,' - +#13'then enabling "List protected items only for allowed users".'; + +#13'This feature is not available anymore.' + +#13'You can achieve similar results by restricting access to @anonymous,' + +#13'then enabling "List protected items only for allowed users".'; MSG_AUTO_DISABLED = 'Because of the problems encountered in loading,' +#13'automatic saving has been disabled' +#13'until you save manually or load another one.'; @@ -10214,20 +10231,20 @@ finally if progFrm.cancelRequested then exit; if loadingVFS.macrosFound and not stringExists(fn, trustedFiles) -and (msgDlg(MSG_MACROS_FOUND, MB_ICONWARNING+MB_YESNO, MSG_TITLE) = mrNo) then +and (msgDlg(MSG_MACROS_FOUND, MB_ICONWARNING+MB_YESNO, MSG_LOADING_VFS) = mrNo) then begin initVFS(); exit; end; addUniqueString(fn, trustedFiles); if loadingVFS.visOnlyAnon then - msgDlg(MSG_VIS_ONLY_ANON, MB_ICONWARNING, MSG_TITLE); -if loadingVFS.resetLetBrowse then msgDlg(MSG_OLD, MB_ICONWARNING, MSG_TITLE); -if loadingVFS.unkFK then msgDlg(MSG_UNK_FK, MB_ICONWARNING, MSG_TITLE); + msgDlg(MSG_VIS_ONLY_ANON, MB_ICONWARNING, MSG_LOADING_VFS); +if loadingVFS.resetLetBrowse then msgDlg(MSG_VFS_OLD, MB_ICONWARNING, MSG_LOADING_VFS); +if loadingVFS.unkFK then msgDlg(MSG_UNK_FK, MB_ICONWARNING, MSG_LOADING_VFS); with loadingVFS do disableAutosave:=unkFK or resetLetBrowse or visOnlyAnon; if loadingVFS.disableAutosave and anyAutosavingFeatureEnabled() then - msgDlg(MSG_AUTO_DISABLED, MB_ICONWARNING, MSG_TITLE); + msgDlg(MSG_AUTO_DISABLED, MB_ICONWARNING, MSG_LOADING_VFS); setStatusBarText(format('Loaded in %.1f seconds (%s)', [took*SECONDS,fn]), 10); @@ -10295,13 +10312,14 @@ begin portBtnClick(portBtn) end; procedure TmainFrm.Checkforupdates1Click(Sender: TObject); resourcestring - MSG_INFO = 'Last stable version: %s'#13#13'Last untested version: %s'#13; + MSG_UPD_INFO = 'Last stable version: %s'#13#13'Last untested version: %s'#13; MSG_NEWER = 'There''s a new version available online: %s'; + MSG_SRC_UPD = 'Searching for updates...'; var updateURL: string; info: Ttpl; begin -progFrm.show('Searching for updates...'); +progFrm.show(MSG_SRC_UPD); try info:=downloadUpdateInfo() finally progFrm.hide() end; @@ -10312,7 +10330,7 @@ if info = NIL then end; try - msgDlg(format(MSG_INFO, [ info['last stable'], first([info['last untested'],'none']) ])); + msgDlg(format(MSG_UPD_INFO, [ info['last stable'], first([info['last untested'],'none']) ])); updateURL:=''; if trim(info['last stable build']) > VERSION_BUILD then @@ -10365,14 +10383,14 @@ end; procedure TmainFrm.noDownloadtimeout1Click(Sender: TObject); resourcestring - MSG = 'Enter the number of MINUTES with no download after which the program automatically shuts down.' + MSG_DL_TIMEOUT_LONG = 'Enter the number of MINUTES with no download after which the program automatically shuts down.' +#13'Leave blank to get no timeout.'; var s:string; begin if noDownloadTimeout > 0 then s:=intToStr(noDownloadTimeout) else s:=''; -if inputquery('No downloads timeout', MSG, s) then +if inputquery(MSG_DL_TIMEOUT, MSG_DL_TIMEOUT_LONG, s) then try setnoDownloadTimeout(strToUInt(s)) except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; @@ -10566,7 +10584,8 @@ if applicationFullyInitialized then begin runEventScript('quit'); timer.enabled:=FALSE; - if autosaveOptionsChk.checked then saveCFG(); + if autosaveOptionsChk.checked and not cfgLoaded then + saveCFG(); end; // we disconnectAll() before srv.free, so we can purgeConnections() if assigned(srv) then srv.disconnectAll(TRUE); @@ -10578,7 +10597,8 @@ end; procedure TmainFrm.Logfile1Click(Sender: TObject); resourcestring - MSG = 'This function does not save any previous information to the log file.' + MSG_LOG_FILE = 'Log file'; + MSG_LOG_FILE_LONG = 'This function does not save any previous information to the log file.' +#13'Instead, it saves all information that appears in the log box in real-time (from when you click "OK", below).' +#13'Specify a filename for the log.' +#13'If you leave the filename blank, no log file is saved.' @@ -10591,7 +10611,7 @@ resourcestring +#13' %w% -- week of the year (1..53)' +#13' %user% -- username surrounded by parenthesis'; begin -InputQuery('Log file', MSG, logFile.filename) +InputQuery(MSG_LOG_FILE, MSG_LOG_FILE_LONG, logFile.filename) end; procedure TmainFrm.Font1Click(Sender: TObject); @@ -10612,7 +10632,8 @@ end; procedure TmainFrm.SetURL1Click(Sender: TObject); resourcestring - MSG = 'Please insert an URL for the link' + MSG_SET_URL = 'Set URL'; + MSG_SET_URL_LONG = 'Please insert an URL for the link' +#13 +#13'Do not forget to specify http:// or whatever.' +#13'%%ip%% will be translated to your address'; @@ -10628,7 +10649,7 @@ and not ansiStartsText('mailto:', s) and not ansiContainsStr(s, '://') and not ansiContainsStr(s, '/') then s:='mailto:'+s; -if not inputquery('Set URL', MSG, s) then exit; +if not inputquery(MSG_SET_URL, MSG_SET_URL_LONG, s) then exit; for i:=0 to filesBox.SelectionCount-1 do with nodeToFile(filesBox.Selections[i]) do if FA_LINK in flags then @@ -10723,11 +10744,12 @@ end; procedure TmainFrm.Loginrealm1Click(Sender: TObject); resourcestring - MSG = 'The realm string is shown on the user/pass dialog of the browser.' + MSG_REALM = 'Login realm'; + MSG_REALM_LONG = 'The realm string is shown on the user/pass dialog of the browser.' +#13'Here you can customize the realm for the login button'; begin -if not inputquery('Login realm', MSG, loginRealm) then exit; -loginRealm:=trim(loginRealm); +if inputquery(MSG_REALM, MSG_REALM_LONG, loginRealm) then + loginRealm:=trim(loginRealm); end; procedure TmainFrm.Introduction1Click(Sender: TObject); @@ -10780,7 +10802,8 @@ end; procedure TmainFrm.Connectionsinactivitytimeout1Click(Sender: TObject); resourcestring - MSG = 'The connection is kicked after a timeout.' + MSG_INACT_TIMEOUT = 'Connection inactivity timeout'; + MSG_INACT_TIMEOUT_LONG = 'The connection is kicked after a timeout.' +#13'Specify in seconds.' +#13'Leave blank to get no timeout.'; var @@ -10788,7 +10811,7 @@ var begin if connectionsInactivityTimeout <= 0 then s:='' else s:=intToStr(connectionsInactivityTimeout); -if not inputquery('Connection inactivity timeout', MSG, s) then exit; +if not inputquery(MSG_INACT_TIMEOUT, MSG_INACT_TIMEOUT_LONG, s) then exit; try connectionsInactivityTimeout:=strToUInt(s) except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; end; @@ -10798,10 +10821,10 @@ begin if connPnl.height > 0 then lastGoodConnHeight:=connPnl.height end; procedure TmainFrm.Clearfilesystem1Click(Sender: TObject); resourcestring - MSG = 'All changes will be lost'#13'Continue?'; + MSG_CHANGES_LOST = 'All changes will be lost'#13'Continue?'; begin checkIfOnlyCountersChanged(); -if VFSmodified and (msgDlg(MSG, MB_ICONQUESTION+MB_YESNO) = IDNO) then exit; +if VFSmodified and (msgDlg(MSG_CHANGES_LOST, MB_ICONQUESTION+MB_YESNO) = IDNO) then exit; initVFS(); end; @@ -10963,14 +10986,15 @@ end; // compressReply procedure TmainFrm.Flagfilesaddedrecently1Click(Sender: TObject); resourcestring - MSG = 'Enter the number of MINUTES files stay flagged from their addition.' + MSG_FLAG_NEW = 'Flag new files'; + MSG_FLAG_NEW_LONG = 'Enter the number of MINUTES files stay flagged from their addition.' +#13'Leave blank to disable.'; var s: string; begin if filesStayFlaggedForMinutes <= 0 then s:='' else s:=intToStr(filesStayFlaggedForMinutes); -if InputQuery('Flag new files', MSG, s) then +if InputQuery(MSG_FLAG_NEW, MSG_FLAG_NEW_LONG, s) then try s:=trim(s); if s = '' then filesStayFlaggedForMinutes:=0 @@ -11034,20 +11058,22 @@ begin openURL('http://www.rejetto.com/hfs-donate') end; procedure TmainFrm.Donotlogaddress1Click(Sender: TObject); resourcestring - MSG = 'Any event from the following IP address mask will be not logged.'; + MSG_DONT_LOG_MASK = 'Do not log address'; + MSG_DONT_LOG_MASK_LONG = 'Any event from the following IP address mask will be not logged.'; begin -inputQuery('Do not log address', MSG, dontLogAddressMask) +inputQuery(MSG_DONT_LOG_MASK, MSG_DONT_LOG_MASK_LONG, dontLogAddressMask) end; procedure TmainFrm.Custom1Click(Sender: TObject); resourcestring - MSG = 'Specify your addresses, each per line'; + MSG_CUST_IP = 'Custom IP addresses'; + MSG_CUST_IP_LONG = 'Specify your addresses, each per line'; var s: string; a: TStringDynArray; begin s:=join(CRLF, customIPs); -if not inputQueryLong('Custom IP addresses', MSG, s) then exit; +if not inputQueryLong(MSG_CUST_IP, MSG_CUST_IP_LONG, s) then exit; customIPs:=split(CRLF, s); removeStrings('', customIPs); // change the address if it is not available anymore @@ -11058,7 +11084,7 @@ end; procedure TmainFrm.Findexternaladdress1Click(Sender: TObject); resourcestring - MSG = 'Can''t find external address'#13'( %s )'; + MSG_NO_EXT_IP = 'Can''t find external address'#13'( %s )'; var service: string; begin @@ -11066,7 +11092,7 @@ begin if not getExternalAddress(externalIP, @service) and not getExternalAddress(externalIP, @service) then begin - msgDlg(format(MSG, [service]), MB_ICONERROR); + msgDlg(format(MSG_NO_EXT_IP, [service]), MB_ICONERROR); exit; end; setDefaultIP(externalIP); @@ -11074,12 +11100,14 @@ msgDlg(externalIP); end; procedure TmainFrm.sbarDblClick(Sender: TObject); +resourcestring + MSG_RESET_TOT = 'Do you want to reset total in/out?'; var i: integer; begin i:=whatStatusPanel(sbar,sbar.screenToClient(mouse.cursorPos).X); if (i = sbarIdxs.totalIn) or (i = sbarIdxs.totalOut) then - if msgDlg('Do you want to reset total in/out?', MB_YESNO) = IDYES then + if msgDlg(MSG_RESET_TOT, MB_YESNO) = IDYES then begin outTotalOfs:=-srv.bytesSent; inTotalOfs:=-srv.bytesReceived; @@ -11101,7 +11129,7 @@ end; procedure forceDynDNSupdate(url:string=''); resourcestring - MSG = 'This option makes pointless the option "Find external address at startup", which has now been disabled for your convenience.'; + MSG_DISAB_FIND_EXT = 'This option makes pointless the option "Find external address at startup", which has now been disabled for your convenience.'; begin dyndns.url:=url; if url = '' then exit; @@ -11110,7 +11138,7 @@ if url = '' then exit; if mainfrm.findExtOnStartupChk.checked then begin mainfrm.findExtOnStartupChk.checked:=FALSE; - msgDlg(MSG, MB_ICONINFORMATION); + msgDlg(MSG_DISAB_FIND_EXT, MB_ICONINFORMATION); exit; end; dyndns.active:=TRUE; @@ -11120,42 +11148,47 @@ end; // forceDynDNSupdate procedure TmainFrm.Custom2Click(Sender: TObject); resourcestring - MSG = 'Enter URL for updating.' + MSG_ENT_URL = 'Enter URL'; + MSG_ENT_URL_LONG = 'Enter URL for updating.' +#13'%ip% will be translated to your external IP.'; var s: string; begin s:=dyndns.url; -if inputQuery('Enter URL', MSG, s) then - if ansiStartsText('https://', s) then - msgDlg('Sorry, HTTPS is not supported yet', MB_ICONERROR) - else - forceDynDNSupdate(s); +if inputQuery(MSG_ENT_URL, MSG_ENT_URL_LONG, s) then + forceDynDNSupdate(s); end; procedure TmainFrm.Defaultpointtoaddfiles1Click(Sender: TObject); begin if selectedFile = NIL then exit; addToFolder:=selectedFile.url(); -msgDlg('Ok'); +msgDlg(S_OK); end; function dynDNSinputUserPwd():boolean; +resourcestring + MSG_ENT_USR = 'Enter user'; + MSG_ENT_PWD = 'Enter password'; begin -result:=inputQuery('Enter user', 'Enter user', dyndns.user) +result:=inputQuery(MSG_ENT_USR, MSG_ENT_USR, dyndns.user) and (dyndns.user > '') - and inputQuery('Enter password', 'Enter password', dyndns.pwd) + and inputQuery(MSG_ENT_PWD, MSG_ENT_PWD, dyndns.pwd) and (dyndns.pwd > ''); dyndns.user:=trim(dyndns.user); dyndns.pwd:=ifThen(dyndns.user='', '', trim(dyndns.pwd)); end; // dynDNSinputUserPwd function dynDNSinputHost():boolean; +resourcestring + MSG_ENT_HOST = 'Enter host'; + MSG_ENT_HOST_LONG = 'Enter domain (full form!)'; + MSG_HOST_FORM = 'Please, enter it in the FULL form, with dots'; begin result:=FALSE; while true do begin - if not inputQuery('Enter host', 'Enter domain (full form!)', dyndns.host) + if not inputQuery(MSG_ENT_HOST, MSG_ENT_HOST_LONG, dyndns.host) or (dyndns.host = '') then exit; dyndns.host:=trim(dyndns.host); if pos('://', dyndns.host) > 0 then @@ -11165,7 +11198,7 @@ while true do result:=TRUE; exit; end; - msgDlg('Please, enter it in the FULL form, with dots', MB_ICONERROR); + msgDlg(MSG_HOST_FORM, MB_ICONERROR); end; end; // dynDNSinputHost @@ -11199,13 +11232,14 @@ end; procedure TmainFrm.Minimumdiskspace1Click(Sender: TObject); resourcestring - MSG = 'The upload will fail if your disk has less than the specified amount of free MegaBytes.'; + MSG_MIN_SPACE = 'Min disk space'; + MSG_MIN_SPACE_LONG = 'The upload will fail if your disk has less than the specified amount of free MegaBytes.'; var s: string; begin if minDiskSpace <= 0 then s:='' else s:=intToStr(minDiskSpace); -if InputQuery('Min disk space', MSG, s) then +if InputQuery(MSG_MIN_SPACE, MSG_MIN_SPACE_LONG, s) then try s:=trim(s); if s = '' then minDiskSpace:=0 @@ -11267,28 +11301,29 @@ end; procedure TmainFrm.Renamepartialuploads1Click(Sender: TObject); resourcestring - MSG = 'This string will be appended to the filename.' + MSG_REN_PART = 'Rename partial uploads'; + MSG_REN_PART_LONG = 'This string will be appended to the filename.' +#13 +#13'If you need more control, enter a string with %name% in it, and this symbol will be replaced by the original filename.'; begin -InputQuery('Rename partial uploads', MSG, renamePartialUploads) +InputQuery(MSG_REN_PART, MSG_REN_PART_LONG, renamePartialUploads) end; procedure TmainFrm.SelfTest1Click(Sender: TObject); resourcestring - MSG_BEFORE = 'Here you can test if your server does work on the Internet.' + MSG_SELF_BEFORE = 'Here you can test if your server does work on the Internet.' +#13'If you are not interested in serving files over the Internet, this is NOT for you.' +#13 +#13'We''ll now perform a test involving network activity.' +#13'In order to complete this test, you may need to allow HFS''s activity in your firewall, by clicking Allow on the warning prompt.' +#13 +#13'WARNING: for the duration of the test, all ban rules and limits on the number of connections won''t apply.'; - MSG_OK = 'The test is successful. The server should be working fine.'; - MSG_OK_PORT = 'Port %s is not working, but another working port has been found and set: %s.'; - MSG_3 = 'You may be behind a router or firewall.'; - MSG_6 = 'You are behind a router.' + MSG_SELF_OK = 'The test is successful. The server should be working fine.'; + MSG_SELF_OK_PORT = 'Port %s is not working, but another working port has been found and set: %s.'; + MSG_SELF_3 = 'You may be behind a router or firewall.'; + MSG_SELF_6 = 'You are behind a router.' +#13'Ensure it is configured to forward port %s to your computer.'; - MSG_7 = 'You may be behind a firewall.' + MSG_SELF_7 = 'You may be behind a firewall.' +#13'Ensure nothing is blocking HFS.'; function doTheTest(host:string; port:string=''):string; @@ -11352,6 +11387,8 @@ var best: record host, res: string; end; procedure tryDifferentHosts(); + resourcestring + MSG_RET_EXT = 'Retrieving external address...'; var i: integer; tries: TStringDynArray; @@ -11359,7 +11396,7 @@ var begin if externalIP = '' then begin - progFrm.show('Retrieving external address...'); + progFrm.show(MSG_RET_EXT); getExternalAddress(externalIP); end; tries:=getPossibleAddresses(); @@ -11428,10 +11465,20 @@ var end; end; // tryDifferentPorts +resourcestring + MSG_SELF_CANT_ON = 'Unable to switch the server on'; + MSG_SELF_CANT_LIST = 'Self test cannot be performed because HFS was configured to accept connections only on 127.0.0.1'; + MSG_SELF_CANT_S = 'Self test doesn''t support HTTPS.'#13'It''s likely it won''t work.'; + MSG_SELF_ING = 'Self testing...'; + MSG_TEST_CANC = 'Test cancelled'; + MSG_TEST_INET = 'Testing internet connection...'; + MSG_SELF_UNAV = 'Sorry, the test is unavailable at the moment'; + MSG_SELF_NO_INET = 'Your internet connection does not work'; + MSG_SELF_NO_ANSWER = 'The test failed: server does not answer.'; var originalPort, s: string; begin -if msgDlg(MSG_BEFORE, MB_ICONWARNING+MB_OKCANCEL) <> IDOK then exit; +if msgDlg(MSG_SELF_BEFORE, MB_ICONWARNING+MB_OKCANCEL) <> IDOK then exit; originalPort:=port; @@ -11440,22 +11487,22 @@ if not srv.active and not startServer() then port:=''; if not startServer() then begin - msgDlg('Unable to switch the server on', MB_ICONERROR); + msgDlg(MSG_SELF_CANT_ON, MB_ICONERROR); exit; end; end; if listenOn = '127.0.0.1' then begin - msgDlg('Self test cannot be performed because HFS was configured to accept connections only on 127.0.0.1', MB_ICONERROR); + msgDlg(MSG_SELF_CANT_LIST, MB_ICONERROR); exit; end; if httpsUrlsChk.checked then - msgDlg('Self test doesn''t support HTTPS.'#13'It''s likely it won''t work.', MB_ICONWARNING); + msgDlg(MSG_SELF_CANT_S, MB_ICONWARNING); disableUserInteraction(); -progFrm.show('Self testing...'); +progFrm.show(MSG_SELF_ING); selfTesting:=TRUE; try best.res:=''; @@ -11473,9 +11520,9 @@ try begin progFrm.progress:=1; if (originalPort = '') or (originalPort = port) then - msgDlg(MSG_OK) + msgDlg(MSG_SELF_OK) else - msgDlg(format(MSG_OK_PORT, [originalPort, port])); + msgDlg(format(MSG_SELF_OK_PORT, [originalPort, port])); if best.host <> defaultIP then setDefaultIP(best.host); exit; end @@ -11484,25 +11531,25 @@ try if progFrm.cancelRequested then begin - msgDlg('Test cancelled'); + msgDlg(MSG_TEST_CANC); exit; end; // error if s = '' then try - progFrm.show('Testing internet connection...'); + progFrm.show(MSG_TEST_INET); httpGet(ALWAYS_ON_WEB_SERVER); - s:='Sorry, the test is unavailable at the moment'; - except s:='Your internet connection does not work' end + s:=MSG_SELF_UNAV; + except s:=MSG_SELF_NO_INET end else begin case s[1] of - '3': s:=MSG_3; - '6': s:=format(MSG_6, [first(port,'80')]); - '7': s:=MSG_7; + '3': s:=MSG_SELF_3; + '6': s:=format(MSG_SELF_6, [first(port,'80')]); + '7': s:=MSG_SELF_7; end; - s:='The test failed: server does not answer.'#13#13+s; + s:=MSG_SELF_NO_ANSWER+#13#13+s; end; msgDlg(s, MB_ICONERROR); @@ -11515,18 +11562,19 @@ end; procedure TmainFrm.Opendirectlyinbrowser1Click(Sender: TObject); resourcestring - MSG = '"Suggest" the browser to open directly the specified files.' + MSG_OPEN_BROW = 'Open directly in browser'; + MSG_OPEN_BROW_LONG = '"Suggest" the browser to open directly the specified files.' +#13'Other files should pop up a save dialog.'; begin -InputQuery('Open directly in browser', MSG, openInBrowser) +InputQuery(MSG_OPEN_BROW, MSG_OPEN_BROW_LONG, openInBrowser) end; procedure TmainFrm.noPortInUrlChkClick(Sender: TObject); resourcestring - MSG = 'You should not use this option unless you really know its meaning.' + MSG_HIDE_PORT = 'You should not use this option unless you really know its meaning.' +#13'Continue?'; begin -if noPortInUrlChk.Checked and (msgDlg(MSG, MB_YESNO) = ID_YES) then +if noPortInUrlChk.Checked and (msgDlg(MSG_HIDE_PORT, MB_YESNO) = ID_YES) then mainfrm.updateUrlBox() else noPortInUrlChk.Checked:=FALSE; @@ -11553,19 +11601,19 @@ end; procedure TmainFrm.Editeventscripts1Click(Sender: TObject); resourcestring - HELP = 'For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts'; + MSG_EVENTS_HLP = 'For help on how to use this file please refer http://www.rejetto.com/wiki/?title=HFS:_Event_scripts'; var fn: string; begin fn:=cfgPath+EVENTSCRIPTS_FILE; if not fileExists(fn) then - saveTextFile(fn, HELP); + saveTextFile(fn, MSG_EVENTS_HLP); exec(getTplEditor(), '"'+fn+'"'); end; procedure TmainFrm.Editresource1Click(Sender: TObject); resourcestring - CAPTION = 'Edit resource'; + MSG_EDIT_RES = 'Edit resource'; var oldRes, oldName, res: string; done, nameSync: boolean; @@ -11576,8 +11624,8 @@ oldRes:=res; oldName:=selectedFile.name; // name sync, only if the name was not customized nameSync:= selectedFile.name = ExtractFileName(selectedFile.resource); -if selectedFile.isFolder then done:=selectFolder(CAPTION, res) -else done:=PromptForFileName(res, '', '', CAPTION); +if selectedFile.isFolder then done:=selectFolder(MSG_EDIT_RES, res) +else done:=PromptForFileName(res, '', '', MSG_EDIT_RES); if done then VFSmodified:=TRUE; selectedFile.setResource(res); if not nameSync then selectedFile.setName(oldName); @@ -11586,11 +11634,11 @@ end; procedure TmainFrm.enableMacrosChkClick(Sender: TObject); resourcestring - MSG = 'The current template is using macros.' + MSG_TPL_USE_MACROS = 'The current template is using macros.' +#13'Do you want to cancel this action?'; begin if anyMacroMarkerIn(tpl.fullText) and not enableMacrosChk.Checked then - enableMacrosChk.Checked:=msgDlg(MSG, MB_ICONWARNING+MB_YESNO) = MRYES; + enableMacrosChk.Checked:=msgDlg(MSG_TPL_USE_MACROS, MB_ICONWARNING+MB_YESNO) = MRYES; end; procedure TmainFrm.modeBtnClick(Sender: TObject); @@ -11776,11 +11824,8 @@ function Tmainfrm.finalInit():boolean; should: string; procedure fix(kind:string); - var - s: string; begin - s:=loadregistry(kind+'\shell\Add to HFS\command', '', HKEY_CLASSES_ROOT); - if (s > '') and (s <> should) then + if not matchStr(loadregistry(kind+'\shell\Add to HFS\command', '', HKEY_CLASSES_ROOT), ['',should] ) then saveRegistry(kind+'\shell\Add to HFS\command','', should, HKEY_CLASSES_ROOT); end; @@ -11792,7 +11837,7 @@ function Tmainfrm.finalInit():boolean; function loadAndApplycfg():boolean; resourcestring - MSG = 'You are invited to re-insert your No-IP configuration, otherwise the updater won''t work as expected.'; + MSG_RE_NOIP = 'You are invited to re-insert your No-IP configuration, otherwise the updater won''t work as expected.'; var iniS, tplS: string; begin @@ -11800,9 +11845,10 @@ function Tmainfrm.finalInit():boolean; result:=setcfg(iniS, FALSE); // convert old no-ip template url to new one (build#204) if dyndns.active and ansiContainsText(dyndns.url, 'no-ip.com') and not ansiContainsText(dyndns.url, 'nic/update') - and (msgDlg(MSG, MB_OKCANCEL+MB_ICONWARNING) = MROK) then + and (msgDlg(MSG_RE_NOIP, MB_OKCANCEL+MB_ICONWARNING) = MROK) then NoIPtemplate1Click(NIL); - if (tplS > '') and assigned(tpl) then setTplText(tplS); + if (tplS > '') and assigned(tpl) then + setTplText(tplS); if lastUpdateCheck = 0 then lastUpdateCheck:=getMtime(lastUpdateCheckFN); end; // loadAndApplycfg @@ -11829,7 +11875,6 @@ function Tmainfrm.finalInit():boolean; end; // strToConnColumns var - cfgLoaded: boolean; params: TStringDynArray; begin result:=FALSE; @@ -12078,53 +12123,51 @@ end; procedure TmainFrm.maxIPs1Click(Sender: TObject); resourcestring - MSG = 'Max simultaneous addresses.'; - MSG2 = 'In this moment there are %d different addresses'; + MSG_NUM_ADDR = 'In this moment there are %d different addresses'; var s: string; i: integer; begin if maxIPs > 0 then s:=intToStr(maxIPs) else s:=''; -if inputquery('Max addresses', MSG+#13+MSG_EMPTY_NO_LIMIT, s) then +if inputquery(MSG_SET_LIMIT, MSG_MAX_SIM_ADDR+#13+MSG_EMPTY_NO_LIMIT, s) then try setMaxIPs(strToUInt(s)) except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; if maxIPs = 0 then exit; i:=countIPs(); if i > maxIPs then - msgDlg(format(MSG2, [i]), MB_ICONWARNING); + msgDlg(format(MSG_NUM_ADDR, [i]), MB_ICONWARNING); end; procedure TmainFrm.maxIPsDLing1Click(Sender: TObject); resourcestring - MSG = 'Max simultaneous addresses downloading.'; - MSG2 = 'In this moment there are %d different addresses downloading'; + MSG_NUM_ADDR_DL = 'In this moment there are %d different addresses downloading'; var s: string; i: integer; begin if maxIPsDLing > 0 then s:=intToStr(maxIPsDLing) else s:=''; -if inputquery('Max addresses downloading', MSG+#13+MSG_EMPTY_NO_LIMIT, s) then +if inputquery(MSG_SET_LIMIT, MSG_MAX_SIM_ADDR_DL+#13+MSG_EMPTY_NO_LIMIT, s) then try setMaxIPsDLing(strToUInt(s)) except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; if maxIPsDLing = 0 then exit; i:=countIPs(TRUE); if i > maxIPsDLing then - msgDlg(format(MSG2, [i]), MB_ICONWARNING); + msgDlg(format(MSG_NUM_ADDR_DL, [i]), MB_ICONWARNING); end; procedure TmainFrm.Maxlinesonscreen1Click(Sender: TObject); resourcestring - MSG = 'Max lines on screen'; + MSG_MAX_LINES = 'Max lines on screen.'; var s: string; begin s:=if_(logMaxLines > 0, intToStr(logMaxLines)); repeat - if not inputQuery(MSG, MSG+'.'#13+MSG_EMPTY_NO_LIMIT, s) then break; + if not inputQuery(MSG_SET_LIMIT, MSG_MAX_LINES+#13+MSG_EMPTY_NO_LIMIT, s) then break; try logMaxLines:=strToUInt(s); break; @@ -12137,13 +12180,14 @@ begin autosaveClick(autosaveVFS, 'file system') end; procedure TmainFrm.Apachelogfileformat1Click(Sender: TObject); resourcestring - MSG = 'Here you can specify how to format the log file complying Apache standard.' + MSG_APACHE_LOG_FMT = 'Apache log file format'; + MSG_APACHE_LOG_FMT_LONG = 'Here you can specify how to format the log file complying Apache standard.' +#13'Leave blank to get bare copy of screen on file.' +#13 +#13'Example:' +#13' %h %l %u %t "%r" %>s %b'; begin -InputQuery('Apache log file format', MSG, logFile.apacheFormat) +InputQuery(MSG_APACHE_LOG_FMT, MSG_APACHE_LOG_FMT_LONG, logFile.apacheFormat) end; procedure TmainFrm.Bindroottorealfolder1Click(Sender: TObject); @@ -12350,16 +12394,17 @@ end; procedure TmainFrm.saveNewFingerprintsChkClick(Sender: TObject); resourcestring - MSG = 'This option creates an .md5 file for every new calculated fingerprint.' + MSG_MD5_WARN = 'This option creates an .md5 file for every new calculated fingerprint.' +#13'Use with care to get not your disk invaded by these files.'; begin if saveNewFingerprintsChk.Checked then - msgDlg(MSG, MB_ICONWARNING); + msgDlg(MSG_MD5_WARN, MB_ICONWARNING); end; procedure TmainFrm.Createfingerprintonaddition1Click(Sender: TObject); resourcestring - MSG = 'When you add files and no fingerprint is found, it is calculated.' + MSG_AUTO_MD5 = 'Auto fingerprint'; + MSG_AUTO_MD5_LONG = 'When you add files and no fingerprint is found, it is calculated.' +#13'To avoid long waitings, set a limit to file size (in KiloBytes).' +#13'Leave empty to disable, and have no fingerprint created.'; var @@ -12367,7 +12412,7 @@ var begin if autoFingerprint = 0 then s:='' else s:=intToStr(autoFingerprint); -if not inputquery('Auto fingerprint', MSG, s) then exit; +if not inputquery(MSG_AUTO_MD5, MSG_AUTO_MD5_LONG, s) then exit; try setAutoFingerprint(strToUInt(s)) except msgDlg(MSG_INVALID_VALUE, MB_ICONERROR) end; end;