Merge branch 'jitingcn-master'

This commit is contained in:
EdisonJwa 2019-01-29 00:30:28 +09:00
commit 25b0ca3095
12 changed files with 8249 additions and 182 deletions

3
.gitignore vendored
View File

@ -1,3 +1,2 @@
*.qm
*.bat *.bat
qt_zh.ts *.exe

29
.travis.yml Normal file
View File

@ -0,0 +1,29 @@
dist: xenial
language: python
python: 3.7
sudo: required
cache:
apt: true
before_install:
- export TZ=Asia/Shanghai
- mkdir dist -p
- sudo apt-get update -q
install:
- sudo apt-get install qt5-default qttools5-dev-tools -y -q
script:
- python3 maker.py
- rm dist/*
deploy:
provider: releases
prerelease: true
api_key:
secure: Uhkopjz/RWKThMknhkOmuWU/8WZgS+0MkNKwV7ydQ0r4xat8m6DbCxmlyHM1Y5sLaC3wKwyW2CTnKue0wscDokNan+KdJLoh90xfJytBcPx33ElYEw7Gc+ChfJQy/KNxlrps4XOH2+wBTemlK2ws1btL70pHrBdgLfQtGiZKC69mz+oegQjkky7wC9JT4ne81rDtNwwV7TT2htP/ewTZejIXct7egydk0PpmXN8j9uondfblkk3t4TbsojWa7JybkE/nD/vxUIzd20gi+it4aYpkepga1cnbzm2/ZMWPeCSquu28X4vnhXW17RmHyT7L5zueL+bAz5AEwK4FfCMZDqETbXhIFz6pgsiVneZMpCr6gqNU112ihKTtVgDQrmk6xw+ST24yfqRP4qUBoF0rYz50YT1VpcucqEAuNK6nkha54P5H9xzZkQEjRLV0Gro0B5euwmPFX0KUbxaq58gUVlq0DJgWblYjILzd9/BgS0KKLmyNL1NSkwRHdn+AJ3s/1h206nzSZ2h/RnEXGzT/f2jsVwxi1QQOVFkQwyVS4IvZl2wgb0XZsK7pAnfjznAsR8NYYzcFb4S4KmYxoBGR6jr2zfw9o0LfraOEDM+A05IjYlMpZYE9i7VhQ+4rbX11cjW6gPAMT86Gqw84rsxPNe3FGyBriN1LRQybljzJe1Y=
file: "Chinese_Translation_(zh-CN).ts3_translation"
skip_cleanup: true
on:
repo: jitingcn/TS3-Translation_zh-CN

69
maker.py Normal file
View File

@ -0,0 +1,69 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import zipfile
import subprocess
from time import strftime, localtime
target_version = "3.2.3"
language = "zh"
cwd = sys.path[0]
src = f"{cwd + os.sep}src{os.sep}"
dist = f"{cwd + os.sep}dist{os.sep}"
ini = f"{dist}package.ini"
def make_release():
if os.name == 'nt':
lrelease = 'C:/Qt/Qt5.6.3/5.6.3/msvc2015_64/bin/lrelease.exe' # On my laptop.
else: # os.name == 'posix'
# result = subprocess.run(['whereis', 'lrelease', '-b'], stdout=subprocess.PIPE).stdout.decode("utf-8")
lrelease = 'lrelease'
# source_file = [f[:-3] for f in os.listdir(src) if os.path.isfile(os.path.join(src, f)) and f[-5:-3] == language]
source_file = [f[:-3] for f in os.listdir(src) if f[-5:-3] == language]
release_file = []
for i in source_file:
print(i)
result = subprocess.run([lrelease, f'{src+i}.ts', '-qm', f'{dist+i}.qm'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(result.stdout.decode("utf-8"))
if result.returncode == 0:
release_file.append(i+".qm")
else:
print(result.stderr.decode("utf-8"))
#except subprocess.CalledProcessError as err:
# print("lrelease error:")
# print(err)'''
return release_file
def make_package(release_list):
timestamp = strftime("%Y%m%d%H%M%S", localtime())
print("Write package info to package.ini ...")
with open(ini, "w", encoding="utf-8") as f:
package_info = [f"Name = TeamSpeak 3 简体中文汉化包 软件版本:{target_version}",
"Type = Translation",
"Author = 寂听",
f"Version = Beta-{timestamp}",
"Platforms = ",
'Description = Source Code: https://github.com/jitingcn/TS3-Translation_zh-CN']
f.write("\n".join(package_info))
file_name = 'Chinese_Translation_(zh-CN).ts3_translation'
print("Zip package ...")
with zipfile.ZipFile(file_name, 'w', zipfile.ZIP_DEFLATED) as release:
release.write(ini, "package.ini")
for i in release_list:
release.write(dist+i, f"translations/{i}")
print("Complete.")
if __name__ == '__main__':
print("Making .qm translations file ...")
release_file_list = make_release()
print("Making .ts3_translation release package ...")
make_package(release_file_list)

View File

@ -214,7 +214,7 @@
</message> </message>
<message> <message>
<source>Integrations</source> <source>Integrations</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -812,11 +812,11 @@ for example: voice.teamspeak.com:9987</source>
</message> </message>
<message> <message>
<source>&amp;Capture Profile:</source> <source>&amp;Capture Profile:</source>
<translation>(&amp;C):</translation> <translation>(&amp;C):</translation>
</message> </message>
<message> <message>
<source>Capture profile used for this server</source> <source>Capture profile used for this server</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add Bookmark</source> <source>Add Bookmark</source>
@ -912,7 +912,7 @@ servers will not be cleared.</source>
</message> </message>
<message> <message>
<source>Capture Profile &lt;strong&gt;&quot;%1&quot;&lt;/strong&gt; has been deleted.&lt;p&gt;Do you want to delete every Hotkey assigned to this profile as well?&lt;/p&gt;</source> <source>Capture Profile &lt;strong&gt;&quot;%1&quot;&lt;/strong&gt; has been deleted.&lt;p&gt;Do you want to delete every Hotkey assigned to this profile as well?&lt;/p&gt;</source>
<translation> &lt;strong&gt;&quot;%1&quot;&lt;/strong&gt; &lt;p&gt;&lt;/p&gt;</translation> <translation> &lt;strong&gt;&quot;%1&quot;&lt;/strong&gt; &lt;p&gt;&lt;/p&gt;</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1455,69 +1455,69 @@ Press Enter to apply filter.</source>
<name>CollisionResolver</name> <name>CollisionResolver</name>
<message> <message>
<source>Resolve Collisions</source> <source>Resolve Collisions</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Hide passwords</source> <source>Hide passwords</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Try to apply decision to all collisions</source> <source>Try to apply decision to all collisions</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>ComplainView</name> <name>ComplainView</name>
<message> <message>
<source>Complaints List</source> <source>Complaints List</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Remove</source> <source>Remove</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Reload</source> <source>Reload</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Target Nickname</source> <source>Target Nickname</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>From Nickname</source> <source>From Nickname</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Reason</source> <source>Reason</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Client banned: %1</source> <source>Client banned: %1</source>
<translation type="unfinished"></translation> <translation>: %1</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>has %n complaint(s)</source> <source>has %n complaint(s)</source>
<translation type="unfinished"> <translation>
<numerusform></numerusform> <numerusform> %n </numerusform>
</translation> </translation>
</message> </message>
<message> <message>
<source>Ban Client</source> <source>Ban Client</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Remove selected...</source> <source>Remove selected...</source>
<translation type="unfinished"></translation> <translation>...</translation>
</message> </message>
<message> <message>
<source>Do you really want to remove all complaints of this user?</source> <source>Do you really want to remove all complaints of this user?</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>Do you really want to remove the selected complain(s)?</source> <source>Do you really want to remove the selected complain(s)?</source>
<translation type="unfinished"> <translation>
<numerusform></numerusform> <numerusform>%n你真的想移除选中的投诉吗</numerusform>
</translation> </translation>
</message> </message>
</context> </context>
@ -1525,11 +1525,11 @@ Press Enter to apply filter.</source>
<name>ConnectDialog</name> <name>ConnectDialog</name>
<message> <message>
<source>None</source> <source>None</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Default</source> <source>Default</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -3564,7 +3564,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<source>Capture Profile</source> <source>Capture Profile</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Playback Profile</source> <source>Playback Profile</source>
@ -3704,7 +3704,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<source>Activate Capture Profile</source> <source>Activate Capture Profile</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Deactivate Capture Profile</source> <source>Deactivate Capture Profile</source>
@ -5361,7 +5361,7 @@ Current: %1</source>
</message> </message>
<message> <message>
<source>Complaints List</source> <source>Complaints List</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Show list of complaints</source> <source>Show list of complaints</source>
@ -12120,225 +12120,225 @@ Useful for servers with a lot of channels and clients.</source>
</message> </message>
<message> <message>
<source>&lt;p&gt;&lt;strong&gt;Automatic&lt;/strong&gt;&lt;br&gt;All items(bookmarks, identities etc.) will be created as synchronized items by default.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Manual&lt;/strong&gt;&lt;br&gt;All items(bookmarks, identities etc.) will be created as local items by default, you decide which individual items will be synchronized.&lt;/p&gt;</source> <source>&lt;p&gt;&lt;strong&gt;Automatic&lt;/strong&gt;&lt;br&gt;All items(bookmarks, identities etc.) will be created as synchronized items by default.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Manual&lt;/strong&gt;&lt;br&gt;All items(bookmarks, identities etc.) will be created as local items by default, you decide which individual items will be synchronized.&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation>&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br&gt; &lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>Disconnected</source> <source>Disconnected</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Reset Password</source> <source>Reset Password</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Change Password</source> <source>Change Password</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Change Username</source> <source>Change Username</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>New Recovery Key</source> <source>New Recovery Key</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Configure Badges</source> <source>Configure Badges</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Redeem Code</source> <source>Redeem Code</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Logout</source> <source>Logout</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Login</source> <source>Login</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;If you turn this off now, your synchronized items will no longer be available on this computer (but stay stored in your myTeamSpeak account).&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://support.teamspeakusa.com/index.php?/Knowledgebase/Article/View/335&quot;&gt;Read details&lt;/a&gt;&lt;/p&gt;</source> <source>&lt;p&gt;If you turn this off now, your synchronized items will no longer be available on this computer (but stay stored in your myTeamSpeak account).&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://support.teamspeakusa.com/index.php?/Knowledgebase/Article/View/335&quot;&gt;Read details&lt;/a&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation>&lt;p&gt; myTeamSpeak &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://support.teamspeakusa.com/index.php?/Knowledgebase/Article/View/335&quot;&gt;&lt;/a&gt;&lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>Warning</source> <source>Warning</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Connected as %1</source> <source>Connected as %1</source>
<translation type="unfinished"></translation> <translation> %1</translation>
</message> </message>
<message> <message>
<source>Login failed, please try again later</source> <source>Login failed, please try again later</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Account verification pending</source> <source>Account verification pending</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Login failed</source> <source>Login failed</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Connecting...</source> <source>Connecting...</source>
<translation type="unfinished"></translation> <translation>...</translation>
</message> </message>
<message> <message>
<source>Not Connected</source> <source>Not Connected</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Email is empty</source> <source>Email is empty</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Password is empty</source> <source>Password is empty</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Please confirm your myTeamSpeak account password</source> <source>Please confirm your myTeamSpeak account password</source>
<translation type="unfinished"></translation> <translation> myTeamSpeak </translation>
</message> </message>
<message> <message>
<source>Password invalid. Try again</source> <source>Password invalid. Try again</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Confirm password</source> <source>Confirm password</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::Account_Create_Login_Dialog</name> <name>com::teamspeak::ui::Account_Create_Login_Dialog</name>
<message> <message>
<source>myTeamSpeak Account</source> <source>myTeamSpeak Account</source>
<translation type="unfinished"></translation> <translation>myTeamSpeak </translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;If disabled, you will automatically be logged out of your myTeamSpeak account on exit.&lt;/p&gt;&lt;p&gt;Please note this will delete all synchronized items on this device when you exit the TeamSpeak client, but they will stay on the myTeamSpeak server.&lt;/p&gt;</source> <source>&lt;p&gt;If disabled, you will automatically be logged out of your myTeamSpeak account on exit.&lt;/p&gt;&lt;p&gt;Please note this will delete all synchronized items on this device when you exit the TeamSpeak client, but they will stay on the myTeamSpeak server.&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished">&lt;p&gt;退 myTeamSpeak &lt;/p&gt;&lt;p&gt;退TeamSpeakmyTeamSpeak&lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Synchronize your bookmarks, identities, hotkeys, addons and more settings over different devices.&lt;/p&gt;</source> <source>&lt;p&gt;Synchronize your bookmarks, identities, hotkeys, addons and more settings over different devices.&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished">&lt;p&gt;&lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>You can login or create an account at any time in Settings</source> <source>You can login or create an account at any time in Settings</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Forgot Password?</source> <source>Forgot Password?</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Invalid email</source> <source>Invalid email</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Password is too short, requires at least %1 characters</source> <source>Password is too short, requires at least %1 characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"> %1 </translation>
</message> </message>
<message> <message>
<source>Password is too long, maximium length is %1 characters</source> <source>Password is too long, maximium length is %1 characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"> %1 </translation>
</message> </message>
<message> <message>
<source>Passwords do not match</source> <source>Passwords do not match</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Username is too short</source> <source>Username is too short</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Username is too long, maximium length is %1 characters</source> <source>Username is too long, maximium length is %1 characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"> %1 </translation>
</message> </message>
<message> <message>
<source>Unknown Username error</source> <source>Unknown Username error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Failed to create account</source> <source>Failed to create account</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Failed to login</source> <source>Failed to login</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Weak password</source> <source>Weak password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Good password</source> <source>Good password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Strong password</source> <source>Strong password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Login failed, please try again later</source> <source>Login failed, please try again later</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Login failed</source> <source>Login failed</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Email already taken</source> <source>Email already taken</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Username already taken</source> <source>Username already taken</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Invalid username</source> <source>Invalid username</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Could not contact server</source> <source>Could not contact server</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Critical management error</source> <source>Critical management error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::Account_Recovery_Key_Dialog</name> <name>com::teamspeak::ui::Account_Recovery_Key_Dialog</name>
<message> <message>
<source>Select recovery key file</source> <source>Select recovery key file</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Text files (*.txt)</source> <source>Text files (*.txt)</source>
<translation type="unfinished"></translation> <translation> (*.txt)</translation>
</message> </message>
<message> <message>
<source>Close</source> <source>Close</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Finished</source> <source>Finished</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Error getting backup key</source> <source>Error getting backup key</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -12376,122 +12376,122 @@ Useful for servers with a lot of channels and clients.</source>
<name>com::teamspeak::ui::BookmarksManager</name> <name>com::teamspeak::ui::BookmarksManager</name>
<message> <message>
<source>Add Bookmark</source> <source>Add Bookmark</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add Folder</source> <source>Add Folder</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Duplicate</source> <source>Duplicate</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Delete</source> <source>Delete</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Connect</source> <source>Connect</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Connect in New Tab</source> <source>Connect in New Tab</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>None</source> <source>None</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Default</source> <source>Default</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Always default</source> <source>Always default</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Confirmation</source> <source>Confirmation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;You clicked a TeamSpeak 3 server link in your web browser&lt;br&gt;which wants to add itself to your bookmarks as:&lt;/p&gt;&lt;p&gt;%1&lt;br&gt;%2:%3&lt;/p&gt;&lt;p&gt;How do you want to proceed?&lt;/p&gt;</source> <source>&lt;p&gt;You clicked a TeamSpeak 3 server link in your web browser&lt;br&gt;which wants to add itself to your bookmarks as:&lt;/p&gt;&lt;p&gt;%1&lt;br&gt;%2:%3&lt;/p&gt;&lt;p&gt;How do you want to proceed?&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished">&lt;p&gt; TeamSpeak 3 &lt;/p&gt;&lt;p&gt;%1&lt;br&gt;%2:%3&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;A plugin wants to add a bookmark as:&lt;/p&gt;&lt;p&gt;%1&lt;br&gt;%2:%3&lt;/p&gt;&lt;p&gt;How do you want to proceed?&lt;/p&gt;</source> <source>&lt;p&gt;A plugin wants to add a bookmark as:&lt;/p&gt;&lt;p&gt;%1&lt;br&gt;%2:%3&lt;/p&gt;&lt;p&gt;How do you want to proceed?&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished">&lt;p&gt;&lt;/p&gt;&lt;p&gt;%1&lt;br&gt;%2:%3&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>Do nothing</source> <source>Do nothing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Bookmark only</source> <source>Bookmark only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Bookmark and Connect</source> <source>Bookmark and Connect</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Bookmarks have been changed.&lt;/p&gt;&lt;p&gt;Do you want to &lt;strong&gt;Save&lt;/strong&gt;, &lt;strong&gt;Discard&lt;/strong&gt; your changes or &lt;strong&gt;Abort&lt;/strong&gt; closing this window?&lt;/p&gt;</source> <source>&lt;p&gt;Bookmarks have been changed.&lt;/p&gt;&lt;p&gt;Do you want to &lt;strong&gt;Save&lt;/strong&gt;, &lt;strong&gt;Discard&lt;/strong&gt; your changes or &lt;strong&gt;Abort&lt;/strong&gt; closing this window?&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished">&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Bookmarks have been changed but there is an invalid nickname.&lt;/p&gt;&lt;p&gt;Do you want to &lt;strong&gt;Discard&lt;/strong&gt; your change or &lt;strong&gt;Abort&lt;/strong&gt; closing this window?&lt;/p&gt;</source> <source>&lt;p&gt;Bookmarks have been changed but there is an invalid nickname.&lt;/p&gt;&lt;p&gt;Do you want to &lt;strong&gt;Discard&lt;/strong&gt; your change or &lt;strong&gt;Abort&lt;/strong&gt; closing this window?&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished">&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>New Folder</source> <source>New Folder</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>New Folder %1</source> <source>New Folder %1</source>
<translation type="unfinished"></translation> <translation type="unfinished">%1</translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Exceeding maximum of %1 synchronized bookmarks</source> <source>Exceeding maximum of %1 synchronized bookmarks</source>
<translation type="unfinished"></translation> <translation type="unfinished"> (%1)</translation>
</message> </message>
<message> <message>
<source>Exceeding maximum of %1 synchronized folders</source> <source>Exceeding maximum of %1 synchronized folders</source>
<translation type="unfinished"></translation> <translation type="unfinished"> (%1)</translation>
</message> </message>
<message> <message>
<source>New Server</source> <source>New Server</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Move to synchronized</source> <source>Move to synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Move to local</source> <source>Move to local</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>You are not connected to this server</source> <source>You are not connected to this server</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::BookmarksMenu</name> <name>com::teamspeak::ui::BookmarksMenu</name>
<message> <message>
<source>&amp;Connect</source> <source>&amp;Connect</source>
<translation type="unfinished"></translation> <translation>(&amp;C)</translation>
</message> </message>
<message> <message>
<source>Connect in new &amp;tab</source> <source>Connect in new &amp;tab</source>
<translation type="unfinished"></translation> <translation type="unfinished">(&amp;T)</translation>
</message> </message>
<message> <message>
<source>&amp;Edit Bookmark</source> <source>&amp;Edit Bookmark</source>
<translation type="unfinished"></translation> <translation>(&amp;E)</translation>
</message> </message>
</context> </context>
<context> <context>
@ -12499,129 +12499,129 @@ Useful for servers with a lot of channels and clients.</source>
<message numerus="yes"> <message numerus="yes">
<source>%n file(s)</source> <source>%n file(s)</source>
<translation type="unfinished"> <translation type="unfinished">
<numerusform></numerusform> <numerusform>%n </numerusform>
</translation> </translation>
</message> </message>
<message> <message>
<source>Information</source> <source>Information</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>Deleted %n file(s) with a total size of %1.</source> <source>Deleted %n file(s) with a total size of %1.</source>
<translation type="unfinished"> <translation type="unfinished">
<numerusform></numerusform> <numerusform> %n %1</numerusform>
</translation> </translation>
</message> </message>
<message> <message>
<source>No files deleted</source> <source>No files deleted</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::ChangeAccountEmailDialog</name> <name>com::teamspeak::ui::ChangeAccountEmailDialog</name>
<message> <message>
<source>Email successfully changed.</source> <source>Email successfully changed.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Failed to change email.</source> <source>Failed to change email.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Current password is empty</source> <source>Current password is empty</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>New email is empty</source> <source>New email is empty</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Email already in use</source> <source>Email already in use</source>
<translation type="unfinished"></translation> <translation type="unfinished">使</translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::ChangeAccountPasswordDialog</name> <name>com::teamspeak::ui::ChangeAccountPasswordDialog</name>
<message> <message>
<source>Password successfully changed.</source> <source>Password successfully changed.</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Failed to change password.</source> <source>Failed to change password.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Weak password</source> <source>Weak password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Good password</source> <source>Good password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Strong password</source> <source>Strong password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Forgot Password?</source> <source>Forgot Password?</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Current password is empty</source> <source>Current password is empty</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>New password is empty</source> <source>New password is empty</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>New password is too short, requires at least %1 characters</source> <source>New password is too short, requires at least %1 characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"> %1 </translation>
</message> </message>
<message> <message>
<source>Password is too long, maximium length is %1 characters</source> <source>Password is too long, maximium length is %1 characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"> %1 </translation>
</message> </message>
<message> <message>
<source>New passwords do not match</source> <source>New passwords do not match</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::ChangeAccountUsernameDialog</name> <name>com::teamspeak::ui::ChangeAccountUsernameDialog</name>
<message> <message>
<source>Username successfully changed.</source> <source>Username successfully changed.</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Failed to change Username.</source> <source>Failed to change Username.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>New Username is empty</source> <source>New Username is empty</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Username already in use</source> <source>Username already in use</source>
<translation type="unfinished"></translation> <translation type="unfinished">使</translation>
</message> </message>
<message> <message>
<source>Invalid username</source> <source>Invalid username</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::FileTransferGroup</name> <name>com::teamspeak::ui::FileTransferGroup</name>
<message> <message>
<source>Invalid channel</source> <source>Invalid channel</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::FileTransferManager</name> <name>com::teamspeak::ui::FileTransferManager</name>
<message> <message>
<source>Select download folder</source> <source>Select download folder</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -12739,18 +12739,18 @@ Useful for servers with a lot of channels and clients.</source>
<name>com::teamspeak::ui::IntegrationBubble</name> <name>com::teamspeak::ui::IntegrationBubble</name>
<message> <message>
<source>Unknown (%1)</source> <source>Unknown (%1)</source>
<translation type="unfinished"></translation> <translation> (%1)</translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::IntegrationsWidget</name> <name>com::teamspeak::ui::IntegrationsWidget</name>
<message> <message>
<source>Visit Dashboard</source> <source>Visit Dashboard</source>
<translation type="unfinished"></translation> <translation>访</translation>
</message> </message>
<message> <message>
<source>Add %1 account</source> <source>Add %1 account</source>
<translation type="unfinished"></translation> <translation> %1 </translation>
</message> </message>
</context> </context>
<context> <context>
@ -12758,34 +12758,35 @@ Useful for servers with a lot of channels and clients.</source>
<message> <message>
<source>The TeamSpeak server could not validate your myTeamSpeak ID. <source>The TeamSpeak server could not validate your myTeamSpeak ID.
Some myTeamSpeak related services are not available.</source> Some myTeamSpeak related services are not available.</source>
<translation type="unfinished"></translation> <translation>TeamSpeak myTeamSpeak ID
myTeamSpeak 使</translation>
</message> </message>
<message> <message>
<source>Reconnect</source> <source>Reconnect</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>com::teamspeak::ui::RedeemBadgeCodeDialog</name> <name>com::teamspeak::ui::RedeemBadgeCodeDialog</name>
<message> <message>
<source>Code successfully redeemed.</source> <source>Code successfully redeemed.</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Failed to redeem code.</source> <source>Failed to redeem code.</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>An error occured, try again later</source> <source>An error occured, try again later</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Invalid code</source> <source>Invalid code</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>You already have this badge</source> <source>You already have this badge</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -13491,132 +13492,134 @@ Please contact the plugin author.</source>
<name>connectDialog</name> <name>connectDialog</name>
<message> <message>
<source>Connect</source> <source>Connect</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Server Nickname or &amp;Address:</source> <source>Server Nickname or &amp;Address:</source>
<translation type="unfinished"></translation> <translation>(&amp;A):</translation>
</message> </message>
<message> <message>
<source>Server &amp;Password:</source> <source>Server &amp;Password:</source>
<translation type="unfinished"></translation> <translation>(&amp;P):</translation>
</message> </message>
<message> <message>
<source>Your requested nickname</source> <source>Your requested nickname</source>
<translation type="unfinished"></translation> <translation>使</translation>
</message> </message>
<message> <message>
<source>Nickname, Hostname or IP of the TeamSpeak 3 server, <source>Nickname, Hostname or IP of the TeamSpeak 3 server,
for example: voice.teamspeak.com:9987</source> for example: voice.teamspeak.com:9987</source>
<translation type="unfinished"></translation> <translation>TeamSpeak 3IP
voice.teamspeak.com9987</translation>
</message> </message>
<message> <message>
<source>Server password (optional)</source> <source>Server password (optional)</source>
<translation type="unfinished"></translation> <translation> ()</translation>
</message> </message>
<message> <message>
<source>&amp;Nickname:</source> <source>&amp;Nickname:</source>
<translation type="unfinished"></translation> <translation>(&amp;N):</translation>
</message> </message>
<message> <message>
<source>[Too Short]</source> <source>[Too Short]</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>One-time privilege key used after connecting. <source>One-time privilege key used after connecting.
Once used, the privilege key will become invalid.</source> Once used, the privilege key will become invalid.</source>
<translation type="unfinished"></translation> <translation>使
使</translation>
</message> </message>
<message> <message>
<source>Hotkey Profile:</source> <source>Hotkey Profile:</source>
<translation type="unfinished"></translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Sending your myTeamSpeak ID grants you access to features like Twitch integration and other services</source> <source>Sending your myTeamSpeak ID grants you access to features like Twitch integration and other services</source>
<translation type="unfinished"></translation> <translation> myTeamSpeak ID 访 Twitch </translation>
</message> </message>
<message> <message>
<source>Send myTeamSpeak ID</source> <source>Send myTeamSpeak ID</source>
<translation type="unfinished"></translation> <translation> myTeamSpeak ID</translation>
</message> </message>
<message> <message>
<source>&amp;Default Channel:</source> <source>&amp;Default Channel:</source>
<translation type="unfinished"></translation> <translation>(&amp;D):</translation>
</message> </message>
<message> <message>
<source>&amp;Phonetic Nickname:</source> <source>&amp;Phonetic Nickname:</source>
<translation type="unfinished"></translation> <translation>(&amp;P):</translation>
</message> </message>
<message> <message>
<source>&amp;Capture Profile:</source> <source>&amp;Capture Profile:</source>
<translation type="unfinished"></translation> <translation>(&amp;C):</translation>
</message> </message>
<message> <message>
<source>&amp;Identity:</source> <source>&amp;Identity:</source>
<translation type="unfinished"></translation> <translation>(&amp;I):</translation>
</message> </message>
<message> <message>
<source>Join this channel on login (optional)</source> <source>Join this channel on login (optional)</source>
<translation type="unfinished"></translation> <translation> ()</translation>
</message> </message>
<message> <message>
<source>Your nickname written as phonemes (optional)</source> <source>Your nickname written as phonemes (optional)</source>
<translation type="unfinished"></translation> <translation> ()</translation>
</message> </message>
<message> <message>
<source>Sound Pack:</source> <source>Sound Pack:</source>
<translation type="unfinished"></translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Password of default channel (optional)</source> <source>Password of default channel (optional)</source>
<translation type="unfinished"></translation> <translation> ()</translation>
</message> </message>
<message> <message>
<source>One-Time &amp;Privilege Key:</source> <source>One-Time &amp;Privilege Key:</source>
<translation type="unfinished"></translation> <translation>(&amp;P):</translation>
</message> </message>
<message> <message>
<source>&amp;Playback Profile:</source> <source>&amp;Playback Profile:</source>
<translation type="unfinished"></translation> <translation>(&amp;P):</translation>
</message> </message>
<message> <message>
<source>Channel &amp;Password:</source> <source>Channel &amp;Password:</source>
<translation type="unfinished"></translation> <translation>(&amp;P):</translation>
</message> </message>
<message> <message>
<source>&amp;Connect</source> <source>&amp;Connect</source>
<translation type="unfinished"></translation> <translation>(&amp;C)</translation>
</message> </message>
<message> <message>
<source>In New &amp;Tab</source> <source>In New &amp;Tab</source>
<translation type="unfinished"></translation> <translation>(&amp;T)</translation>
</message> </message>
<message> <message>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>createProfileDialog</name> <name>createProfileDialog</name>
<message> <message>
<source>Create Profile</source> <source>Create Profile</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Profile Name:</source> <source>Profile Name:</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Create Profile Using:</source> <source>Create Profile Using:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Default Settings</source> <source>Default Settings</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Profile Copy from:</source> <source>Profile Copy from:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -13866,15 +13869,15 @@ Once used, the privilege key will become invalid.</source>
</message> </message>
<message> <message>
<source>Always set clients 3D positions when available</source> <source>Always set clients 3D positions when available</source>
<translation>3D位置</translation> <translation type="unfinished">3D空间位置</translation>
</message> </message>
<message> <message>
<source>Own client plays mic clicks</source> <source>Own client plays mic clicks</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Other clients play mic clicks</source> <source>Other clients play mic clicks</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

7967
src/qt_zh.ts Normal file

File diff suppressed because it is too large Load Diff