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;