diff --git a/libresonic-main/src/main/resources/org/libresonic/player/i18n/ResourceBundle_zh_TW.properties b/libresonic-main/src/main/resources/org/libresonic/player/i18n/ResourceBundle_zh_TW.properties
index 2caf1afb..64c9d881 100644
--- a/libresonic-main/src/main/resources/org/libresonic/player/i18n/ResourceBundle_zh_TW.properties
+++ b/libresonic-main/src/main/resources/org/libresonic/player/i18n/ResourceBundle_zh_TW.properties
@@ -13,7 +13,7 @@ common.play = \u64AD\u653E
common.add = \u65B0\u589E
common.download = \u4E0B\u8F09
common.close = \u95DC\u9589
-common.refresh = \u91CD\u65B0\u6574\u7406
+common.refresh = \u91CD\u65B0\u8F09\u5165
common.next = \u4E0B\u4E00\u9801
common.previous = \u4E0A\u4E00\u9801
common.more = \u66F4\u591A
@@ -35,19 +35,19 @@ login.login = \u767B\u5165
login.remember = \u8A18\u5F97\u6211
login.logout = \u60A8\u5DF2\u7D93\u767B\u51FA\u3002
login.error = \u5E33\u865F\u6216\u662F\u5BC6\u78BC\u932F\u8AA4\u3002
-login.insecure = {0} \u672A\u53D7\u4FDD\u8B77\u3002\u8ACB\u5148\u4EE5\u4F7F\u7528\u8005\u53CA\u5BC6\u78BC "admin"\u767B\u5165\uFF0C\u6216\u9EDE\u9078 \u9019\u88E1\uFF0C\u4E26\u4E14\u7ACB\u523B\u8B8A\u66F4\u60A8\u7684\u5BC6\u78BC\u3002
+login.insecure = {0} \u4E26\u4E0D\u5B89\u5168\u3002\u8ACB\u5148\u4EE5\u5E33\u865F\u8207\u5BC6\u78BC\u300Cadmin\u300D\u767B\u5165\uFF0C\u4E26\u4E14\u7ACB\u523B\u66F4\u6539\u5BC6\u78BC\u3002
login.recover = \u5FD8\u8A18\u5BC6\u78BC\uFF1F
# recover.jsp
recover.title = \u5FD8\u8A18\u5BC6\u78BC\uFF1F
recover.text = \u8981\u91CD\u8A2D\u5BC6\u78BC\uFF0C\u8ACB\u5728\u4E0B\u65B9\u8F38\u5165\u60A8\u7684\u5E33\u865F\u6216\u662FEmail\u4F4D\u5740\u3002
-recover.username = \u5E33\u865F\u6216Email\u4F4D\u5740
+recover.username = \u5E33\u865F\u6216\u96FB\u5B50\u90F5\u4EF6\u4F4D\u5740
recover.send = \u91CD\u8A2D\u5BC6\u78BC\u4E26\u5BC4\u7D66\u6211
recover.success = \u60A8\u7684\u5BC6\u78BC\u5DF2\u91CD\u8A2D\u4E26\u5BC4\u5230\u4E86 {0} \u3002
recover.error.usernotfound = \u62B1\u6B49\uFF0C\u672A\u627E\u5230\u4F7F\u7528\u8005\u3002
-recover.error.noemail = \u62B1\u6B49\uFF0C\u8A72\u4F7F\u7528\u8005\u672A\u8A3B\u518A\u4FE1\u7BB1\u3002
-recover.error.sendfailed = Email\u5BC4\u9001\u5931\u6557\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002
-recover.error.invalidcaptcha = \u62B1\u6B49\uFF0C\u8F38\u5165\u7684CAPTCHA\u6587\u5B57\u6709\u8AA4\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21\u3002
+recover.error.noemail = \u62B1\u6B49\uFF0C\u8A72\u4F7F\u7528\u8005\u672A\u8A3B\u518A\u96FB\u5B50\u90F5\u4EF6\u3002
+recover.error.sendfailed = \u96FB\u5B50\u90F5\u4EF6\u5BC4\u9001\u5931\u6557\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002
+recover.error.invalidcaptcha = \u62B1\u6B49\uFF0C\u8F38\u5165\u7684 CAPTCHA \u6587\u5B57\u6709\u8AA4\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21\u3002
# accessDenied.jsp
accessDenied.title = \u62D2\u7D55\u5B58\u53D6
@@ -55,15 +55,15 @@ accessDenied.text = \u62B1\u6B49\uFF0C\u60A8\u7121\u6B0A\u57F7\u884C\u6240\u8ACB
# notFound.jsp
notFound.title = \u627E\u4E0D\u5230
-notFound.text =
Sorry, we could not find what you were looking for.
Try reloading the web page. If that doesn't help, \
- try scanning the media folders again.
-notFound.reload = \u91CD\u65B0\u6574\u7406\u9801\u9762
-notFound.scan = Media folders settings
+notFound.text = \u62B1\u6B49\uFF0C\u6211\u5011\u627E\u4E0D\u5230\u60A8\u60F3\u8981\u7684\u6771\u897F\u3002
\u8ACB\u91CD\u65B0\u8F09\u5165\u7DB2\u9801\u3002\
+ \u5982\u679C\u6C92\u6709\u6539\u5584\uFF0C\u8ACB\u91CD\u65B0\u6383\u63CF\u5A92\u9AD4\u8CC7\u6599\u593E\u3002
+notFound.reload = \u91CD\u65B0\u8F09\u5165\u9801\u9762
+notFound.scan = \u5A92\u9AD4\u8CC7\u6599\u593E\u8A2D\u5B9A
# top.jsp
top.home = \u9996\u9801
top.now_playing = \u64AD\u653E
-top.starred = Starred
+top.starred = \u661F\u865F\u6A19\u8A18
top.settings = \u8A2D\u5B9A
top.status = \u72C0\u614B
top.podcast = \u64AD\u5BA2
@@ -73,11 +73,11 @@ top.search = \u641C\u5C0B
top.upgrade = \u6709\u65B0\u7248\u672C\u63D0\u4F9B. \u4E0B\u8F09 {0} {1} \
\u9019\u9700\u8981\u60A8\u7684\u4F3A\u670D\u5668\u53EF\u4EE5\u900F\u904E\u7DB2\u969B\u7DB2\u8DEF\u5B58\u53D6\u3002
@@ -274,7 +319,7 @@ help.homepage.title = \u9996\u9801
help.forum.title = \u8AD6\u58C7
help.shop.title = \u5546\u54C1
help.contact.title = \u806F\u7E6B
-help.contact.text = {0} \u7531 Sindre Mehus \u958B\u767C\u53CA\u7DAD\u8B77((%s = \u6A94\u6848\u5C07\u88AB\u8F49\u63DB\uFF0C%b = \u64A5\u653E\u5668\u7684\u6700\u5927\u50B3\u8F38\u7387\uFF0C%t = \u6A19\u984C\uFF0C%a = \u6B4C\u624B\uFF0C%l = \u5C08\u8F2F)
\
- \u8F49\u6A94\u904E\u7A0B\u662F\u7531\u4E00\u500B\u97F3\u6A02\u683C\u5F0F\u8F49\u63DB\u6210\u53E6\u4E00\u7A2E\u683C\u5F0F\u3002{1}\u7684\u8F49\u6A94 \
- \u5F15\u64CE\u5C07\u975E\u4E32\u6D41\u683C\u5F0F\u8F49\u63DB\u6210\u4E32\u6D41\u3002\u76F4\u63A5\u8F49\u6A94\u4E26\u4E14\u4E0D\u9700\u8981\u78C1\u789F\u904B\u4F5C
(%s = \u6A94\u6848\u5C07\u88AB\u8F49\u63DB\uFF0C%b = \u64AD\u653E\u5668\u7684\u6700\u5927\u50B3\u8F38\u7387\uFF0C%t = \u6A19\u984C\uFF0C%a = \u4F5C\u8005\uFF0C%l = \u5C08\u8F2F)
\
+ \u8F49\u6A94\u904E\u7A0B\u662F\u7531\u4E00\u500B\u97F3\u6A02\u683C\u5F0F\u8F49\u63DB\u6210\u53E6\u4E00\u7A2E\u683C\u5F0F\u3002 \
+ {1}\u7684\u8F49\u6A94\u5F15\u64CE\u5C07\u975E\u4E32\u6D41\u683C\u5F0F\u8F49\u63DB\u6210\u4E32\u6D41\u3002 \
+ \u5373\u6642\u8F49\u6A94\u4E26\u4E14\u4E0D\u9700\u8981\u78C1\u789F\u7A7A\u9593\u3002
\u5BE6\u969B\u7684\u8F49\u63DB\u52D5\u4F5C\u901A\u5E38\u662F\u900F\u904E\u7B2C\u4E09\u65B9\u8EDF\u9AD4\u4EE5\u547D\u4EE4\u5217\u65B9\u5F0F\u8F49\u63DB\uFF0C\u7A0B\u5F0F\u5B89\u88DD\u5728 {0}\u3002
\
- \u8ACB\u6CE8\u610F\uFF0C\u8F49\u63DB\u7684\u7A0B\u5E8F\u7684\u7531\u64A5\u653E\u5668\u8A2D\u5B9A\u4E2D\u52FE\u9078\u3002\u5982\u679C"\u9810\u8A2D"\u662F\u5DF2\u52FE\u9078\u7684\uFF0C\u90A3\u9EBC\u8F49\u63DB\u6703\u81EA\u52D5\u5728\u65B0\u64AD\u653E\u5668\u4E2D\u4F7F\u7528\u3002
+ \u8ACB\u6CE8\u610F\uFF0C\u8F49\u63DB\u7684\u7A0B\u5E8F\u7684\u7531\u64AD\u653E\u5668\u8A2D\u5B9A\u4E2D\u52FE\u9078\u3002\u5982\u679C"\u9810\u8A2D"\u662F\u5DF2\u52FE\u9078\u7684\uFF0C\u90A3\u9EBC\u8F49\u63DB\u6703\u81EA\u52D5\u5728\u65B0\u64AD\u653E\u5668\u4E2D\u4F7F\u7528\u3002
# internetRadioSettings.jsp
internetradiosettings.streamurl = \u4E32\u6D41\u7DB2\u5740
@@ -454,7 +504,7 @@ podcastsettings.keep.many = \u6700\u8FD1 {0} \u7684\u6536\u85CF
podcastsettings.download = \u5982\u679C\u6709\u6700\u65B0\u7684\u6536\u85CF
podcastsettings.download.all = \u5168\u90E8\u4E0B\u8F09
podcastsettings.download.one = \u4E0B\u8F09\u6700\u65B0\u7684
-podcastsettings.download.many = \u4E0B\u8F09\u6700\u8FD1{0}\u7684\u6536\u85CF
+podcastsettings.download.many = \u4E0B\u8F09\u6700\u8FD1 {0} \u7684\u6536\u85CF
podcastsettings.download.none = \u4E0D\u505A
podcastsettings.interval.manually = \u624B\u52D5
podcastsettings.interval.hourly = \u6BCF\u5C0F\u6642
@@ -463,35 +513,38 @@ podcastsettings.interval.weekly = \u6BCF\u9031
podcastsettings.folder = \u5132\u5B58\u64AD\u5BA2\u5728
# playerSettings.jsp
-playersettings.noplayers = \u6C92\u6709\u64A5\u653E\u5668\u3002
+playersettings.noplayers = \u6C92\u6709\u64AD\u653E\u5668\u3002
playersettings.type = \u5F62\u614B
playersettings.lastseen = \u4E0A\u6B21\u767B\u5165
-playersettings.title = \u9078\u64C7\u64A5\u653E\u5668
+playersettings.title = \u9078\u64C7\u64AD\u653E\u5668
playersettings.technology.web.title = \u7DB2\u9801\u64AD\u653E
playersettings.technology.external.title = \u76F4\u63A5\u7528\u5916\u90E8\u64AD\u653E\u5668\u64AD\u653E
-playersettings.technology.external_with_playlist.title = \u4EE5\u64AD\u653E\u6E05\u55AE\u5728\u5916\u90E8\u64A5\u653E\u5668\u64AD\u653E
+playersettings.technology.external_with_playlist.title = \u4EE5\u64AD\u653E\u6E05\u55AE\u5728\u5916\u90E8\u64AD\u653E\u5668\u64AD\u653E
playersettings.technology.jukebox.title = \u9EDE\u64AD\u6A5F\u6A21\u5F0F
-playersettings.technology.web.text = \u76F4\u63A5\u5728\u7DB2\u9801\u4E2D\u7684Flash\u64AD\u653E\u5668\u64AD\u653E.
-playersettings.technology.external.text = \u5728\u60A8\u5E38\u7528\u7684\u64A5\u653E\u5668\u4E2D\u64AD\u653E\uFF0C\u4F8B\u5982:WinAmp\u3001Windows Media Player\u3001iTunes.
+playersettings.technology.web.text = \u76F4\u63A5\u5728\u7DB2\u9801\u4E2D\u7684 Flash \u64AD\u653E\u5668\u64AD\u653E\u3002
+playersettings.technology.external.text = \u5728\u60A8\u5E38\u7528\u7684\u64AD\u653E\u5668\u4E2D\u64AD\u653E\uFF0C\u4F8B\u5982\uFF1AWinAmp\u3001Windows Media Player\u3001iTunes\u3002
playersettings.technology.external_with_playlist.text = \u5982\u540C\u4E0A\u9762\u7684\u9078\u9805\uFF0C\u4F46\u662F\u64AD\u653E\u6E05\u55AE\u7531\u5BA2\u6236\u7AEF\u7BA1\u7406\uFF0C\u800C\u4E0D\u662F\u4F3A\u670D\u5668\u3002 \
\u5728\u9019\u500B\u6A21\u5F0F\u4E2D\u53EF\u4EE5\u8DF3\u8457\u64AD\u653E\u3002
playersettings.technology.jukebox.text = \u76F4\u63A5\u5728Libresonic\u4F3A\u670D\u5668\u4E2D\u64AD\u653E\u3002(\u9650\u5DF2\u6388\u6B0A\u7684\u7528\u6236\u3002)
-playersettings.name = \u64A5\u653E\u5668\u540D\u7A31
+playersettings.name = \u64AD\u653E\u5668\u540D\u7A31
playersettings.maxbitrate = \u6700\u5927\u50B3\u8F38\u7387
-playersettings.notranscoder = \
__text__ | \u7C97\u9AD4 | \\\\ | \u63DB\u884C |
\
@@ -568,7 +637,7 @@ main.sharealbum = \u5206\u4EAB
main.more = \u66F4\u591A\u52D5\u4F5C\u2026
main.more.selection = \u9078\u64C7\u6B4C\u66F2\u2026
main.more.share = \u5206\u4EAB
-main.nowplaying =\u76EE\u524D\u64A5\u653E
+main.nowplaying =\u76EE\u524D\u64AD\u653E
main.lyrics = \u6B4C\u8A5E
main.minutesago = \u5206\u9418\u524D
main.chat = \u4EA4\u8AC7
@@ -581,15 +650,15 @@ main.addnext = \u52A0\u5230\u4E0B\u4E00\u9996
main.addlast = \u52A0\u5230\u6700\u5F8C\u4E00\u9996
main.addnext.toast = \u6B64\u6B4C\u66F2\u5C07\u6703\u65BC\u4E0B\u4E00\u9996\u6642\u64AD\u653E
main.addlast.toast = \u6B64\u6B4C\u66F2\u5C07\u6703\u65BC\u6700\u5F8C\u4E00\u9996\u6642\u64AD\u653E
-main.similarartists = \u76F8\u4F3C\u7684\u6B4C\u624B
-main.startradio = Start radio
+main.similarartists = \u76F8\u4F3C\u7684\u4F5C\u8005
+main.startradio = \u958B\u59CB\u7DB2\u8DEF\u96FB\u53F0
main.playtopsongs = \u64AD\u653E\u6392\u884C\u699C\u6B4C\u66F2
main.showall = \u986F\u793A\u6240\u6709\u5C08\u8F2F
main.topsongs = \u6392\u884C\u699C\u6B4C\u66F2
# rating.jsp
-rating.rating = \u7B49\u7D1A
-rating.clearrating = \u6E05\u9664\u7B49\u7D1A
+rating.rating = \u8A55\u5206
+rating.clearrating = \u6E05\u9664\u8A55\u5206
# coverArt.jsp
coverart.change = \u8B8A\u66F4
@@ -601,13 +670,14 @@ allmusic.text = \u5728 allmusic.com \u641C\u5C0B\u5C08\u8F2F {0} - \u8A
# changeCoverArt.jsp
changecoverart.title = \u8B8A\u66F4\u5C08\u8F2F\u5C01\u9762
changecoverart.address = \u6216\u662F\u8F38\u5165\u5716\u5F62\u7684\u4F4D\u5740
-changecoverart.artist = \u6B4C\u624B
+changecoverart.artist = \u4F5C\u8005
changecoverart.album = \u5C08\u8F2F
changecoverart.search = Google \u5716\u7247\u641C\u5C0B
changecoverart.wait = \u8ACB\u7A0D\u5019\u2026
changecoverart.success = \u5716\u7247\u4E0B\u8F09\u6210\u529F\u3002
changecoverart.error = \u7121\u6CD5\u4E0B\u8F09\u5716\u7247\u3002
changecoverart.noimagesfound = \u627E\u4E0D\u5230\u5716\u7247\u3002
+changecoverart.courtesy = \u5716\u7247\u7531 Last.fm \u63D0\u4F9B
# changeCoverArtConfirm.jsp
changeCoverArtConfirm.failed = \u7121\u6CD5\u4FEE\u6539\u5C08\u8F2F\u5C01\u9762:
"{0}"
@@ -617,7 +687,7 @@ edittags.title = \u7DE8\u8F2F\u6A19\u7C64
edittags.file = \u6A94\u6848
edittags.track = \u97F3\u8ECC
edittags.songtitle = \u66F2\u540D
-edittags.artist = \u6B4C\u624B
+edittags.artist = \u4F5C\u8005
edittags.album = \u5C08\u8F2F
edittags.year = \u767C\u884C
edittags.genre = \u66F2\u98A8
@@ -633,19 +703,19 @@ edittags.skipped = \u7565\u904E
edittags.error = \u932F\u8AA4
# share.jsp
-share.title = Share
-share.warning = IMPORTANT NOTICE!
Play fair – Don't share copyrighted material in any manner that violates the law.
+share.title = \u5206\u4EAB
+share.warning = \u91CD\u8981\u63D0\u9192\uFF01
\u516C\u5E73\u7AF6\u722D – \u4E0D\u8981\u4EE5\u9055\u53CD\u6CD5\u5F8B\u7684\u65B9\u5F0F\u5206\u4EAB\u53D7\u7248\u6B0A\u4FDD\u8B77\u7684\u8CC7\u6599\u3002
share.facebook = \u5206\u4EAB\u81F3 Facebook
share.twitter = \u5206\u4EAB\u81F3 Twitter
share.googleplus = \u5206\u4EAB\u81F3 Google+
-share.link = Or share this with someone by sending them this link: {0}
-share.disabled = To share your music with someone you must first register your own libresonic.org address.
\
- Please go to Settings > Network (administrative rights required).
-share.manage = Manage my shared media
+share.link = \u6216\u662F\u900F\u904E\u6B64\u9023\u7D50\u5206\u4EAB\uFF1A{0}
+share.disabled = \u8981\u8207\u67D0\u4EBA\u5206\u4EAB\u97F3\u6A02\uFF0C\u60A8\u5FC5\u9808\u5148\u8A3B\u518A\u81EA\u5DF1\u7684 libresonic.org \u4F4D\u5740\u3002
\
+ \u8ACB\u5230\u300C\u8A2D\u5B9A\u300D\u2192\u300C\u7DB2\u8DEF\u300D (\u9700\u8981\u7BA1\u7406\u54E1\u6B0A\u9650)\u3002
+share.manage = \u7BA1\u7406\u6211\u5206\u4EAB\u7684\u5A92\u9AD4
# podcastReceiver.jsp
podcastreceiver.title = \u64AD\u5BA2\u63A5\u6536\u5668
-podcastreceiver.empty = You haven't subscribed to any podcasts yet.
+podcastreceiver.empty = \u60A8\u5C1A\u672A\u8A02\u95B1\u4EFB\u4F55\u64AD\u5BA2\u3002
podcastreceiver.episodes = {0} \u7AE0\u7BC0
podcastreceiver.expandall = \u986F\u793A\u6536\u85CF\u96C6
podcastreceiver.collapseall = \u96B1\u85CF\u6536\u85CF\u96C6
@@ -666,13 +736,13 @@ podcastreceiver.newestepisodes = \u6700\u65B0\u7AE0\u7BC0
# lyrics.jsp
lyrics.title = \u6B4C\u8A5E
-lyrics.artist = \u6B4C\u624B
+lyrics.artist = \u4F5C\u8005
lyrics.song = \u6B4C\u66F2
lyrics.search = \u641C\u5C0B
lyrics.wait = \u641C\u5C0B\u6B4C\u8A5E\u4E2D\uFF0C\u8ACB\u7A0D\u5019\u2026
lyrics.courtesy = (\u6B4C\u8A5E\u7531chartlyrics.com\u63D0\u4F9B)
lyrics.nolyricsfound = \u627E\u4E0D\u5230\u6B4C\u8A5E\u3002
-lyrics.trylater = Sorry, the lyrics search engine allows just one search every 20 seconds. Try again later.
+lyrics.trylater = \u62B1\u6B49\uFF0C\u6B4C\u8A5E\u641C\u5C0B\u5F15\u64CE\u6BCF 20 \u79D2\u53EA\u5141\u8A31\u4E00\u6B21\u641C\u5C0B\u3002\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002
# helpPopup.jsp
helppopup.title = {0} \u5354\u52A9
@@ -680,44 +750,60 @@ helppopup.transcode.title = \u6700\u5927\u50B3\u8F38\u7387
helppopup.transcode.text = \u5982\u679C\u60A8\u7684\u64AD\u653E\u983B\u5BEC\u6709\u9650\uFF0C\u53EF\u4EE5\u904E\u8A2D\u5B9A\u6700\u5927\u50B3\u8F38\u7387\u4F86\u6539\u5584\u3002 \
\u4F8B\u5982\uFF0C\u5982\u679C\u60A8\u539F\u672C\u7684 mp3 \u6A94\u6848\u7684\u7DE8\u78BC\u7387\u70BA 256Kbps(\u6BCF\u79D2\u5343\u4F4D\u5143)\uFF0C\u5982\u679C\u8A2D\u5B9A\u6700\u5927\u50B3\u8F38\u7387\u70BA128\
\u6703\u4F7F {0} \u81EA\u52D5\u5C07\u539F\u672C 256Kbps \u7684\u97F3\u6A02\u7DE8\u78BC\u70BA\u6210 128 Kbps\u3002
+helppopup.databaseConfigType.title = Data Source Config Type
+helppopup.databaseConfigType.text = Legacy will default to an embed H2 database which is the backwards compatible \
+ option. Embedded JDBC will connect to a JDBC database with the provided settings. JNDI will lookup \
+ a DataSource connection already setup in your application container.
+helppopup.mysqlvarcharmaxlength.title = MySQL Varchar Max Length
+helppopup.mysqlvarcharmaxlength.text = MySQL has a maximum row length and as such needs varchar columns to be \
+ bounded. This value entered here will be the maximum column size.
+helppopup.usertablequote.title = User Table Quote
+helppopup.usertablequote.text = The Libresonic users table is named user. This may be a keyword conflict in some \
+ databases such as Postgres. So for postgres, you will want to use the double quote character (") here
+helppopup.jndiname.title = Data Source JNDI Lookup Name
+helppopup.jndiname.text = A JNDI name to lookup a Data Source of type javax.sql.DataSource. This is something that is\
+ created in your application container (i.e. tomcat).
+helppopup.embeddriver.title = JDBC Driver Class
+helppopup.embeddriver.text = JDBC Driver dependent class name that implments java.sql.Driver. I.E. for postgres one \
+ would use org.postgresql.Driver. This class must be present on the classpath.
helppopup.playlistfolder.title = \u64AD\u653E\u6E05\u55AE\u8CC7\u6599\u593E
helppopup.playlistfolder.text = \u5B58\u653E\u64AD\u653E\u6E05\u55AE\u7684\u8CC7\u6599\u593E\u3002
-helppopup.musicmask.title = \u97F3\u6A02\u7684\u9644\u5C6C\u6A94\u540D
-helppopup.musicmask.text = \u6307\u5B9A\u97F3\u6A02\u6A94\u6848\u7684\u9644\u5C6C\u6A94\u540D
-helppopup.videomask.title = \u8996\u8A0A\u6A94\u7684\u9644\u5C6C\u6A94\u540D
-helppopup.videomask.text = \u6307\u5B9A\u8996\u8A0A\u6A94\u6848\u7684\u8CA0\u6578\u6A94\u540D
-helppopup.coverartmask.title = \u5C08\u8F2F\u5C01\u9762\u9644\u5C6C\u6A94\u540D
-helppopup.coverartmask.text = \u8207\u97F3\u6A02\u8CC7\u6599\u593E\u653E\u5728\u4E00\u8D77\u7684\u5C08\u8F2F\u5C01\u9762\uFF0C\u5148\u6307\u5B9A\u5C08\u8F2F\u5C01\u9762\u6A94\u6848\u7684\u9644\u5C6C\u6A94\u540D\u3002
+helppopup.musicmask.title = \u97F3\u6A02\u7684\u9644\u6A94\u540D
+helppopup.musicmask.text = \u6307\u5B9A\u97F3\u6A02\u6A94\u6848\u7684\u9644\u6A94\u540D
+helppopup.videomask.title = \u8996\u8A0A\u6A94\u7684\u9644\u6A94\u540D
+helppopup.videomask.text = \u6307\u5B9A\u8996\u8A0A\u6A94\u6848\u7684\u9644\u6A94\u540D
+helppopup.coverartmask.title = \u5C08\u8F2F\u5C01\u9762\u9644\u6A94\u540D
+helppopup.coverartmask.text = \u8207\u97F3\u6A02\u8CC7\u6599\u593E\u653E\u5728\u4E00\u8D77\u7684\u5C08\u8F2F\u5C01\u9762\uFF0C\u5148\u6307\u5B9A\u5C08\u8F2F\u5C01\u9762\u6A94\u6848\u7684\u9644\u6A94\u540D\u3002
helppopup.downsamplecommand.title = \u964D\u983B\u6307\u4EE4
helppopup.downsamplecommand.text = \u8B93\u60A8\u8A2D\u5B9A\u8ABF\u964D\u64AD\u653E\u97F3\u6A02\u6642\u964D\u4F4E\u53D6\u6A23\u983B\u7387\u7684\u6307\u4EE4\u3002
\
- (%s = \u8981\u964D\u983B\u7684\u6A94\u6848\uFF0C%b = \u64A5\u653E\u5668\u7684\u6700\u5927\u50B3\u8F38\u7387\uFF0C%t = \u6A19\u984C\uFF0C%a = \u6B4C\u624B\uFF0C%l = \u5C08\u8F2F)
+ (%s = \u8981\u964D\u983B\u7684\u6A94\u6848\uFF0C%b = \u64AD\u653E\u5668\u7684\u6700\u5927\u50B3\u8F38\u7387\uFF0C%t = \u6A19\u984C\uFF0C%a = \u4F5C\u8005\uFF0C%l = \u5C08\u8F2F)
helppopup.hlscommand.title = HTTP Live Streaming command
-helppopup.hlscommand.text = The command used to create video segments for Apple''s HLS (HTTP Live Streaming) protocol.
-helppopup.index.title = \u5206\u985E\u6AA2\u7D22
-helppopup.index.text = \u8A2D\u5B9A\u97F3\u6A02\u7D22\u5F15(\u5728\u87A2\u5E55\u5DE6\u65B9)\u6B78\u985E\u7684\u65B9\u5F0F\u3002\u5728\u97F3\u6A02\u8CC7\u6599\u593E\u88E1\u7684 \
- \u6A94\u6848\u5F88\u5BB9\u6613\u900F\u904E\u7D22\u5F15\u5B58\u53D6\u3002
\
- \u5B9A\u7FA9\u65B9\u5F0F\u662F\u4EE5\u7A7A\u767D\u5206\u9694\u7684\u7D22\u5F15\u9805\u76EE\u3002\u4E00\u822C\u4F86\u8AAA\uFF0C\u9805\u76EE\u662F\u55AE\u4E00\u5B57\u6BCD\uFF0C \
- \u4F46\u60A8\u4E5F\u53EF\u4EE5\u6307\u5B9A\u591A\u500B\u5B57\u6BCD\u3002\u4F8B\u5982\uFF1A\u9805\u76EE The \u6703\u9023\u7D50\u5230\u6240\u6709 \
- \u958B\u982D\u70BA "The" \u7684\u8CC7\u6599\u593E\u8207\u6A94\u6848\u3002
\
+helppopup.hlscommand.text = \u7528\u4F86\u70BA Apple \u7684 HLS (HTTP Live Streaming) \u5354\u5B9A\u4F7F\u7528\u800C\u5EFA\u7ACB\u5F71\u7247\u7247\u6BB5\u7684\u6307\u4EE4\u3002
+helppopup.index.title = \u7D22\u5F15
+helppopup.index.text = \u6307\u5B9A\u97F3\u6A02\u7D22\u5F15 (\u5728\u87A2\u5E55\u5DE6\u65B9) \u7684\u986F\u793A\u65B9\u5F0F\u3002 \
+ \u5728\u6839\u97F3\u6A02\u8CC7\u6599\u593E\u88E1\u7684\u6A94\u6848\u8207\u8CC7\u6599\u593E\u80FD\u900F\u904E\u7D22\u5F15\u8F15\u9B06\u5B58\u53D6\u3002
\
+ \u8A2D\u5B9A\u7684\u683C\u5F0F\u662F\u4EE5\u7A7A\u767D\u5206\u9694\u7684\u7D22\u5F15\u9805\u76EE\u7684\u6E05\u55AE\u3002 \
+ \u4E00\u822C\u4F86\u8AAA\uFF0C\u9805\u76EE\u662F\u55AE\u4E00\u5B57\u6BCD\uFF0C\u4F46\u60A8\u4E5F\u53EF\u4EE5\u6307\u5B9A\u591A\u500B\u5B57\u6BCD\u3002 \
+ \u4F8B\u5982\uFF1A\u9805\u76EE The \u6703\u9023\u7D50\u5230\u6240\u6709\u958B\u982D\u70BA\u300CThe\u300D\u7684\u8CC7\u6599\u593E\u8207\u6A94\u6848\u3002
\
\u60A8\u4E5F\u53EF\u4EE5\u7528\u62EC\u5F27\u4F86\u5305\u542B\u591A\u500B\u7D22\u5F15\u5B57\u5143\u3002\u4F8B\u5982\uFF1A \
A-E(ABCDE) \u6703\u986F\u793A\u70BA A-E \u4E26\u9023\u7D50\u5230\u6240\u6709\u958B\u982D\u70BA \
A\u3001B\u3001C\u3001D\u6216E\u7684\u8CC7\u6599\u593E\u8207\u6A94\u6848\u3002\u9019\u5C0D\u65BC\u6536\u7D0D\u5C11\u898B\u7684\u5B57\u5143(\u50CF\u662FX\u3001Y\u8207Z)\u5F88\u6709\u5E6B\u52A9\uFF0C\u6216 \
\u6B78\u985E\u91CD\u97F3\u5B57\u5143(\u5982A\u3001\u00C0\u8207\u00C1)
\
- \u7121\u6CD5\u6B78\u985E\u7684\u8CC7\u6599\u593E\u8207\u6A94\u6848\uFF0C\u5C07\u5168\u90E8\u6B78\u65BC "#" \u9805\u76EE\u4E2D\u3002
+ \u7121\u6CD5\u6B78\u985E\u7684\u8CC7\u6599\u593E\u8207\u6A94\u6848\uFF0C\u5C07\u5168\u90E8\u6B78\u65BC \u300C#\u300D \u9805\u76EE\u4E2D\u3002
helppopup.ignoredarticles.title = \u5FFD\u7565\u5B57\u9996
-helppopup.ignoredarticles.text = \u6709\u4E9B\u5B57\u9996(\u4F8B\u5982"The") \u901A\u5E38\u5728\u66F2\u76EE\u6B78\u985E\u4E2D\u61C9\u8A72\u5FFD\u7565\uFF0C\u8ACB\u5728\u6B64\u8655\u8A2D\u5B9A\u3002
+helppopup.ignoredarticles.text = \u8B93\u60A8\u53EF\u4EE5\u6307\u5B9A\u5B57\u9996\u6E05\u55AE (\u4F8B\u5982\u300CThe\u300D) \uFF0C\u4F7F\u9019\u4E9B\u5B57\u9996\u5728\u5EFA\u7ACB\u76EE\u9304\u6642\u6703\u88AB\u5FFD\u7565\u3002
helppopup.shortcuts.title = \u6377\u5F91
helppopup.shortcuts.text = \u4EE5\u7A7A\u767D\u4F86\u5206\u9694\u5728\u6700\u4E0A\u5C64\u76EE\u9304\u4E2D\u5EFA\u7ACB\u6377\u5F91\u6AA2\u7D22\u3002\u7528\u5F15\u865F\u4F86\u5206\u7D44\u5B57\u5143\uFF0C\u4F8B\u5982\uFF1A
\
New Incoming "Sound tracks"
helppopup.language.title = \u8A9E\u8A00
helppopup.language.text = \u5728\u9019\u88E1\u9078\u64C7\u6240\u63D0\u4F9B\u7684\u986F\u793A\u8A9E\u8A00\u3002
helppopup.visibility.title = \u986F\u793A\u9805\u76EE
-helppopup.visibility.text = \u9078\u64C7\u5728\u700F\u89BD\u6216\u662F\u5728\u64AD\u653E\u6E05\u55AE\u4E2D\uFF0C\u986F\u793A\u97F3\u6A02\u7684\u5404\u7A2E\u8A73\u7D30\u8CC7\u8A0A
+helppopup.visibility.text = \u9078\u64C7\u5728\u700F\u89BD\u6216\u662F\u5728\u64AD\u653E\u6E05\u55AE\u4E2D\uFF0C\u986F\u793A\u97F3\u6A02\u7684\u5404\u7A2E\u8A73\u7D30\u8CC7\u8A0A\u3002
helppopup.partymode.title = \u5BB4\u6703\u6A21\u5F0F
-helppopup.partymode.text = \u4F7F\u7528\u5BB4\u6703\u6A21\u5F0F\u7C21\u5316\u4F7F\u7528\u8005\u754C\u9762\uFF0C\u63D0\u4F9B\u7D66\u7121\u7D93\u9A57\u7684\u4F7F\u7528\u8005\u64CD\u4F5C\
+helppopup.partymode.text =
\u4F7F\u7528\u5BB4\u6703\u6A21\u5F0F\u7C21\u5316\u4F7F\u7528\u8005\u754C\u9762\uFF0C\u63D0\u4F9B\u7D66\u7121\u7D93\u9A57\u7684\u4F7F\u7528\u8005\u64CD\u4F5C\uFF0C \
\u4E5F\u53EF\u4EE5\u907F\u514D\u56E0\u70BA\u610F\u5916\u64CD\u4F5C\u800C\u5F04\u4E82\u4E86\u64AD\u653E\u6E05\u55AE\u3002
helppopup.theme.title = \u4F48\u666F\u4E3B\u984C
-helppopup.theme.text = \u8B93\u60A8\u53EF\u4EE5\u9078\u64C7\u4E0D\u540C\u7684\u4F48\u666F\u4E3B\u984C\u3002\u4F48\u666F\u4E3B\u984C\u900F\u904E\u4E0D\u540C\u7684\u984F\u8272\u3001\u5B57\u9AD4\u3001\u5716\u50CF\u7B49\uFF0C\u5E36\u7D66\u60A8\u4E0D\u540C\u7684{0}\u611F\u53D7\u3002
+helppopup.theme.text = \u8B93\u60A8\u53EF\u4EE5\u9078\u64C7\u4E0D\u540C\u7684\u4F48\u666F\u4E3B\u984C\u3002\u4F48\u666F\u4E3B\u984C\u900F\u904E\u4E0D\u540C\u7684\u984F\u8272\u3001\u5B57\u9AD4\u3001\u5716\u50CF\u7B49\uFF0C\u5E36\u7D66\u60A8\u4E0D\u540C\u7684 {0} \u611F\u53D7\u3002
helppopup.welcomemessage.title = \u6B61\u8FCE\u6A19\u984C
helppopup.welcomemessage.text = \u5728\u9996\u9801\u4E2D\u986F\u793A\u7684\u6A19\u984C\u3002
helppopup.loginmessage.title = \u767B\u5165\u8A0A\u606F
@@ -737,41 +823,43 @@ helppopup.ldap.text = \u4F7F\u7528\u8005\u53EF\u4EE5\u7D93\u7531\u5916\u90E8\
\u7576\u8A2D\u5B9A\u4F7F\u7528LDAP\u4F7F\u7528\u8005\u767B\u5165 {0}\uFF0C\u5E33\u865F\u53CA\u5BC6\u78BC\u5C31\u7531\u5916\u90E8\u4F3A\u670D\u5668\u9A57\u8B49\uFF0C\u800C\u4E0D\u662F\u7531{0}\u4F86\u9A57\u8B49\u3002
helppopup.ldapurl.title = LDAP \u4F4D\u5740
helppopup.ldapurl.text = \u8A2D\u5B9A LDAP \u4F3A\u670D\u5668\u7684\u4F4D\u5740\u3002\u5354\u5B9A\u61C9\u8A72\u662F ldap:// \u6216 ldaps:// \
- (\u7D93\u7531SSL\u7684LDAP\u5354\u5B9A)\u3002\u8ACB\u53C3\u8003\u9019\u88E1 \
+ (\u7D93\u7531 SSL \u7684 LDAP \u5354\u5B9A)\u3002\u8ACB\u53C3\u8003\u9019\u88E1 \
\u6709\u66F4\u591A\u8A73\u7D30\u8AAA\u660E\u3002
helppopup.ldapsearchfilter.title = LDAP \u641C\u5C0B\u904E\u6FFE
-helppopup.ldapsearchfilter.text = \u8490\u5C0BLDAP\u7528\u6236\u6642\uFF0C\u5728\u9019\u88E1\u8A2D\u5B9A\u904E\u6FFE\u8868\u793A\u5F0F \
+helppopup.ldapsearchfilter.text =
\u641C\u5C0B LDAP \u7528\u6236\u6642\uFF0C\u5728\u9019\u88E1\u8A2D\u5B9A\u904E\u6FFE\u8868\u793A\u5F0F \
(\u5B9A\u7FA9\u5728RFC 2254)\u3002 \
- The pattern "'{0'}" is replaced by the username, \u4F8B\u5982: \
+ \u5176\u4E2D\u5B57\u4E32\u300C'{0'}\u300D\u6703\u88AB\u53D6\u4EE3\u70BA\u5E33\u865F\uFF0C\u4F8B\u5982\uFF1A \
\
- - (uid='{0'}) - this would search for a username match on the uid attribute.
\
- - (sAMAccountName='{0'}) - typically used for authentication in Microsoft Active Directory.
\
+ - (uid='{0'}) - \u9019\u6703\u641C\u5C0B\u7B26\u5408 uid \u5C6C\u6027\u7684\u4F7F\u7528\u8005\u3002
\
+ - (sAMAccountName='{0'}) - \u901A\u5E38\u7528\u65BC Microsoft Active Directory \u4E2D\u7684\u8EAB\u4EFD\u9A57\u8B49\u3002
\
helppopup.ldapmanagerdn.title = LDAP \u7BA1\u7406\u8005 DN
-helppopup.ldapmanagerdn.text = \u5982\u679C LDAP \u4F3A\u670D\u5668\u4E0D\u652F\u63F4\u533F\u540D\u4F7F\u7528\u8005\u9023\u7DDA\uFF0C\u60A8\u5FC5\u9808\u6307\u5B9A DN \
- (Distinguished Name)\u53CALDAP\u4F7F\u7528\u8005\u7684\u5BC6\u78BC\u3002
+helppopup.ldapmanagerdn.text = \u5982\u679C LDAP \u4F3A\u670D\u5668\u4E0D\u652F\u63F4\u533F\u540D\u9023\u7DDA\uFF0C\u60A8\u5FC5\u9808\u6307\u5B9A LDAP \u5E33\u865F\u7684 DN \
+ (Distinguished Name)\u8207\u5BC6\u78BC\u3002
helppopup.ldapautoshadowing.title = \u5728 {0} \u81EA\u52D5\u5EFA\u7ACB LDAP \u5E33\u865F
-helppopup.ldapautoshadowing.text = \u8A2D\u5B9A\u9019\u500B\u9078\u9805\uFF0C\u5247LDAP \u7528\u6236\u4E0D\u5FC5\u5728\u767B\u5165\u4E4B\u524D\u624B\u52D5\u5EFA\u7ACB{0}\u7684\u5E33\u865F\u3002
\
- \u6CE8\u610F\uFF01 \u9019\u8868\u793A\u6240\u6709\u5728LDAP\u4E0A\u7684\u4F7F\u7528\u8005\u90FD\u53EF\u4EE5\u767B\u5165\u60A8\u7684{0}\uFF0C\
+helppopup.ldapautoshadowing.text =
\u8A2D\u5B9A\u9019\u500B\u9078\u9805\uFF0C\u5247 LDAP \u7528\u6236\u4E0D\u5FC5\u5728\u767B\u5165\u4E4B\u524D\u624B\u52D5\u5EFA\u7ACB {0} \u7684\u5E33\u865F\u3002
\
+ \u6CE8\u610F\uFF01 \u9019\u8868\u793A\u6240\u6709\u5728 LDAP \u4E0A\u7684\u4F7F\u7528\u8005\u90FD\u53EF\u4EE5\u767B\u5165\u60A8\u7684 {0}\uFF0C\
\u4E5F\u8A31\u9019\u4E0D\u662F\u60A8\u60F3\u8981\u7684\u529F\u80FD\u3002
-helppopup.playername.title = \u64A5\u653E\u5668\u540D\u7A31
-helppopup.playername.text = \u8B93\u60A8\u5E6B\u64AD\u653E\u5668\u6307\u5B9A\u4E00\u500B\u5BB9\u6613\u8A18\u4F4F\u7684\u540D\u5B57\uFF0C\u5982\u201C\u5DE5\u4F5C\u5BA4\u201D\u6216\u201C\u5BA2\u5EF3\u201D
+helppopup.playername.title = \u64AD\u653E\u5668\u540D\u7A31
+helppopup.playername.text = \u8B93\u60A8\u5E6B\u64AD\u653E\u5668\u6307\u5B9A\u4E00\u500B\u5BB9\u6613\u8A18\u4F4F\u7684\u540D\u5B57\uFF0C\u5982\u300C\u5DE5\u4F5C\u5BA4\u300D\u6216\u300C\u5BA2\u5EF3\u300D\u3002
helppopup.autocontrol.title = \u63A7\u5236\u64AD\u653E\u5668\u81EA\u52D5\u64AD\u653E
helppopup.autocontrol.text = \u8A2D\u5B9A\u9019\u500B\u9078\u9805\uFF0C {0} \u5728\u60A8\u958B\u59CB\u64AD\u653E\u6642\uFF0C\u6703\u81EA\u52D5\u555F\u52D5\u64AD\u653E\u5668\
- \u5426\u5247\u60A8\u5FC5\u9808\u81EA\u5DF1\u555F\u52D5\u4E26\u4E14\u9023\u63A5\u60A8\u7684\u64A5\u653E\u5668\u3002
+ \u5426\u5247\u60A8\u5FC5\u9808\u81EA\u5DF1\u555F\u52D5\u4E26\u4E14\u9023\u63A5\u60A8\u7684\u64AD\u653E\u5668\u3002
+helppopup.m3ubom.title = \u61C9\u7528 BOM \u65BC M3U \u6A94\u6848
+helppopup.m3ubom.text = \u61C9\u7528 BOM \u6A19\u8A18\u65BC\u7522\u751F\u7684 M3U \u64AD\u653E\u6E05\u55AE\u4F86\u589E\u52A0 Unicode \u76F8\u5BB9\u6027\u3002
helppopup.dynamicip.title = \u52D5\u614B IP \u4F4D\u5740
helppopup.dynamicip.text = \u95DC\u9589\u6B64\u9078\u9805\uFF0C\u5982\u679C\u60A8\u4F7F\u7528\u975C\u614BIP\u4F4D\u5740\u3002
helppopup.smtpServer.title = SMTP \u4F3A\u670D\u5668
-helppopup.smtpServer.text = The hostname of the SMTP server. This server will be used to send e-mails to users \
- who have requested a password reset.
-helppopup.smtpPort.title = SMTP Port
-helppopup.smtpPort.text = The server's port that should be connected to for SMTP traffic.
-helppopup.smtpCredentials.title = SMTP Credentials
-helppopup.smtpCredentials.text = The credentials to be used to connect to the SMTP server. Leave empty to connect without authentication.
-helppopup.smtpEncryption.title = SMTP Encryption
-helppopup.smtpEncryption.text = The encryption method to be used to connect to the SMTP server. Choose "None" for no encryption.
-helppopup.smtpFrom.title = From address
-helppopup.smtpFrom.text = The sender address for mails originating from the Libresonic server. Must be a valid e-mail address.
+helppopup.smtpServer.text = SMTP \u4F3A\u670D\u5668\u7684\u4E3B\u6A5F\u540D\u7A31\u3002 \
+ \u6B64\u4F3A\u670D\u5668\u662F\u7528\u4F86\u5C0D\u8ACB\u6C42\u91CD\u8A2D\u5BC6\u78BC\u7684\u4F7F\u7528\u8005\u767C\u9001\u96FB\u5B50\u90F5\u4EF6\u3002
+helppopup.smtpPort.title = SMTP \u9023\u63A5\u57E0
+helppopup.smtpPort.text = \u4F3A\u670D\u5668\u7528\u4F86\u8655\u7406 SMTP \u670D\u52D9\u7684\u9023\u63A5\u57E0\u3002
+helppopup.smtpCredentials.title = SMTP \u6191\u8B49
+helppopup.smtpCredentials.text = \u7528\u4F86\u9023\u63A5\u5230 SMTP \u4F3A\u670D\u5668\u7684\u6191\u8B49\u3002\u82E5\u7559\u767D\u6642\u9023\u7DDA\u6642\u5C07\u4E0D\u9A57\u8B49\u3002
+helppopup.smtpEncryption.title = SMTP \u52A0\u5BC6
+helppopup.smtpEncryption.text = \u9023\u63A5 SMTP \u4F3A\u670D\u5668\u6642\u4F7F\u7528\u7684\u52A0\u5BC6\u65B9\u5F0F\u3002\u9078\u64C7\u300CNone\u300D\u5C07\u4E0D\u52A0\u5BC6\u3002
+helppopup.smtpFrom.title = \u4F86\u6E90\u4F4D\u5740
+helppopup.smtpFrom.text = Libresonic \u4F3A\u670D\u5668\u5BC4\u9001\u6642\u4F7F\u7528\u7684\u4F86\u6E90\u4F4D\u5740\u3002\u5FC5\u9808\u662F\u5408\u6CD5\u7684\u96FB\u5B50\u90F5\u4EF6\u4F4D\u5740\u3002
# wap/index.jsp
wap.index.missing = \u627E\u4E0D\u5230\u97F3\u6A02
@@ -792,7 +880,7 @@ wap.playlist.title = \u64AD\u653E\u6E05\u55AE
wap.playlist.noplayer = \u9023\u63A5\u4E0D\u5230\u64AD\u653E\u5668
wap.playlist.clear = \u6E05\u9664
wap.playlist.load = \u8F09\u5165
-wap.playlist.random = \u96A8\u8208
+wap.playlist.random = \u96A8\u6A5F
wap.playlist.play = \u5728\u96FB\u8A71\u4E2D\u64AD\u9001
# wap/search.jsp