summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2018-02-11 21:40:53 +0100
committerStanislaw Halik <sthalik@misaki.pl>2018-02-12 10:05:00 +0100
commit31d9768413199f388c216d92d9db5158ce8785cf (patch)
treebe1d7431f986121f858a3f4788e6425c914db8e3
parent94e483008ed35b2b8d16bce733bbdf5398d19ec1 (diff)
cmake: add zh_CN
cf. #746
-rw-r--r--CMakeLists.txt2
-rw-r--r--api/lang/zh_CN.ts4
-rw-r--r--compat/lang/zh_CN.ts4
-rw-r--r--csv/lang/zh_CN.ts4
-rw-r--r--cv/lang/zh_CN.ts4
-rw-r--r--dinput/lang/zh_CN.ts4
-rw-r--r--ext-falcon-bms-linear-acc/lang/zh_CN.ts4
-rw-r--r--filter-accela/lang/zh_CN.ts50
-rw-r--r--filter-ewma2/lang/zh_CN.ts48
-rw-r--r--filter-kalman/lang/zh_CN.ts31
-rw-r--r--gui/lang/zh_CN.ts343
-rw-r--r--logic/lang/zh_CN.ts4
-rw-r--r--migration/lang/zh_CN.ts4
-rw-r--r--options/lang/zh_CN.ts4
-rw-r--r--pose-widget/lang/zh_CN.ts4
-rw-r--r--proto-flightgear/lang/zh_CN.ts19
-rw-r--r--proto-fsuipc/lang/zh_CN.ts42
-rw-r--r--proto-ft/lang/zh_CN.ts44
-rw-r--r--proto-mouse/lang/zh_CN.ts59
-rw-r--r--proto-simconnect/lang/zh_CN.ts50
-rw-r--r--proto-udp/lang/zh_CN.ts26
-rw-r--r--proto-vjoystick/lang/zh_CN.ts15
-rw-r--r--spline/lang/zh_CN.ts4
-rw-r--r--tracker-aruco/lang/zh_CN.ts91
-rw-r--r--tracker-freepie-udp/lang/zh_CN.ts79
-rw-r--r--tracker-fusion/lang/zh_CN.ts49
-rw-r--r--tracker-hatire/lang/zh_CN.ts350
-rw-r--r--tracker-hydra/lang/zh_CN.ts15
-rw-r--r--tracker-joystick/lang/zh_CN.ts79
-rw-r--r--tracker-pt/lang/zh_CN.ts279
-rw-r--r--tracker-pt/module/lang/zh_CN.ts4
-rw-r--r--tracker-rift-025/lang/zh_CN.ts46
-rw-r--r--tracker-rift-042/lang/zh_CN.ts38
-rw-r--r--tracker-rift-080/lang/zh_CN.ts31
-rw-r--r--tracker-rift-140/lang/zh_CN.ts31
-rw-r--r--tracker-rs/lang/zh_CN.ts53
-rw-r--r--tracker-s2bot/lang/zh_CN.ts83
-rw-r--r--tracker-steamvr/lang/zh_CN.ts26
-rw-r--r--tracker-test/lang/zh_CN.ts15
-rw-r--r--tracker-tobii-eyex/lang/zh_CN.ts56
-rw-r--r--tracker-udp/lang/zh_CN.ts58
-rw-r--r--tracker-wii/lang/zh_CN.ts4
-rw-r--r--tracker-wii/wiiyourself/lang/zh_CN.ts4
-rw-r--r--variant/default/lang/zh_CN.ts189
44 files changed, 2352 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8c408efc..101d070f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,7 +35,7 @@ set_property(GLOBAL PROPERTY opentrack-all-source-dirs "")
set(opentrack_all-translations "" CACHE STRING "Leave empty for default")
if(".${opentrack_all-translations}" STREQUAL ".")
- set(opentrack_all-translations "nl_NL;ru_RU;stub")
+ set(opentrack_all-translations "nl_NL;ru_RU;stub;zh_CN")
endif()
include(opentrack-word-size)
diff --git a/api/lang/zh_CN.ts b/api/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/api/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/compat/lang/zh_CN.ts b/compat/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/compat/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/csv/lang/zh_CN.ts b/csv/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/csv/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/cv/lang/zh_CN.ts b/cv/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/cv/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/dinput/lang/zh_CN.ts b/dinput/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/dinput/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/ext-falcon-bms-linear-acc/lang/zh_CN.ts b/ext-falcon-bms-linear-acc/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/ext-falcon-bms-linear-acc/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/filter-accela/lang/zh_CN.ts b/filter-accela/lang/zh_CN.ts
new file mode 100644
index 00000000..98e95407
--- /dev/null
+++ b/filter-accela/lang/zh_CN.ts
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>AccelaUICdialog_accela</name>
+ <message>
+ <source>Filter settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rotation filtering (Yaw, pitch, and roll)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smoothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>0°</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Deadzone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Position filtering (X, Y, Z - translation)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>0mm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;right&quot;&gt;&lt;br/&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Accela by &lt;/span&gt;&lt;a href=&quot;https://github.com/sthalik&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0057ae;&quot;&gt;Stanisław Halik&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;br/&gt;Thanks to &lt;/span&gt;&lt;a href=&quot;https://github.com/dbaarda&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0057ae;&quot;&gt;Donovan Baarda&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align=&quot;right&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;2012-2017&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;right&quot;&gt;&lt;br/&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Visit &lt;/span&gt;&lt;a href=&quot;https://github.com/opentrack/opentrack/wiki/Accela-in-opentrack-2.3&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0000ff;&quot;&gt;our wiki&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt; for description of the settings.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dialog_accela</name>
+ <message>
+ <source>%1°</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1mm</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/filter-ewma2/lang/zh_CN.ts b/filter-ewma2/lang/zh_CN.ts
new file mode 100644
index 00000000..79e93591
--- /dev/null
+++ b/filter-ewma2/lang/zh_CN.ts
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UICdialog_ewma</name>
+ <message>
+ <source>EWMA filter settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Max</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Min</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Curve</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:10pt; font-weight:600;&quot;&gt;Give the filter up to 60 seconds to warm up and stop shaking.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Min:&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Defines the way the filter responds to fast movements;&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Higher value: slower response;&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Max:&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Defines the way the filter responds to slow movements;&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Higher value: slower response;&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Pow:&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Defines the filters &apos;readiness&apos; to respond to speed changes;&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Higher value = &lt;/span&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;faster&lt;/span&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; response;&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/filter-kalman/lang/zh_CN.ts b/filter-kalman/lang/zh_CN.ts
new file mode 100644
index 00000000..a572be5f
--- /dev/null
+++ b/filter-kalman/lang/zh_CN.ts
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>KalmanUICdialog_kalman</name>
+ <message>
+ <source>Kalman settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Measurement noise</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rotation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>°</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>-</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/gui/lang/zh_CN.ts b/gui/lang/zh_CN.ts
new file mode 100644
index 00000000..be1f3d91
--- /dev/null
+++ b/gui/lang/zh_CN.ts
@@ -0,0 +1,343 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>BrowseButton</name>
+ <message>
+ <source>Set executable name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Executable (*.exe);;All Files (*)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>keyboard_listener</name>
+ <message>
+ <source>Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Press a key or close this window to remove the keybinding.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>mapping_dialog</name>
+ <message>
+ <source>Mapping properties</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Max input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Asymmetric mapping below</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Max output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>180°</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>90°</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Z</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1°</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options_dialog</name>
+ <message>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Shortcuts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Global shortcuts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Center&lt;/span&gt; - use current pose as looking perfectly forward.&lt;br/&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Toggle&lt;/span&gt; - keep looking at same spot until next toggle keypress.&lt;br/&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Zero&lt;/span&gt; - keep looking forward until next zero keypress.&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bind</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start tracking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop tracking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zero</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Toggle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zero while held</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart tracking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Toggle while held</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Toggle tracking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Center at startup</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Never translate the application interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Minimize to tray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable tray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Minimize to tray on startup when enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output remap</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Z</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Relative translation only</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invert</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Assign input axis to output axis.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Custom center pose</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Alter the centered position sent to games. Useful if the default position is too much downward or upward.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>°</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> cm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CSV Data Logging</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable - You will be asked for a filename whenever tracking starts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Relative translation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With relative mode on, translation is applied after rotation. For example, rotating +180 degrees yaw and moving backwards results in moving forward as a result of that rotation.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enabled when not aiming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disable for Y</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disable for X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disable effect by roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disable for Z (for zoom on Z axis)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disable effect by pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disable effect by yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Neck displacement</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eyes will be offset from the pivot of rotation, assumed to be the neck. It also works with relative translation disabled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forward from center of rotation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game detection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start tracking automatically when a game starts with selected profile, and stop when the game exits.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Joy button %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>process_detector</name>
+ <message>
+ <source>Game detector</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start profiles from game executable names in this list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Executable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Profile</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>-</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/logic/lang/zh_CN.ts b/logic/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/logic/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/migration/lang/zh_CN.ts b/migration/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/migration/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/options/lang/zh_CN.ts b/options/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/options/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/pose-widget/lang/zh_CN.ts b/pose-widget/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/pose-widget/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/proto-flightgear/lang/zh_CN.ts b/proto-flightgear/lang/zh_CN.ts
new file mode 100644
index 00000000..688104c8
--- /dev/null
+++ b/proto-flightgear/lang/zh_CN.ts
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UICFGControls</name>
+ <message>
+ <source>FlightGear protocol settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>IP address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Port</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/proto-fsuipc/lang/zh_CN.ts b/proto-fsuipc/lang/zh_CN.ts
new file mode 100644
index 00000000..05fbe216
--- /dev/null
+++ b/proto-fsuipc/lang/zh_CN.ts
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>FSUIPCControls</name>
+ <message>
+ <source>Locate file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FSUIPC DLL file (FSUIPC*.dll);;All Files (*)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UICFSUIPCControls</name>
+ <message>
+ <source>FSUIPC settings FaceTrackNoIR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Location of FSUIPC.dll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The DLL should be located in the Modules/ directory of MS FS 2004</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/proto-ft/lang/zh_CN.ts b/proto-ft/lang/zh_CN.ts
new file mode 100644
index 00000000..63791bc8
--- /dev/null
+++ b/proto-ft/lang/zh_CN.ts
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>FTControls</name>
+ <message>
+ <source>Select the desired NPClient DLL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dll file (*.dll);;All Files (*)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UICFTControls</name>
+ <message>
+ <source>freetrack protocol settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Repair NPClient location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Locate DLL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Replace the registry entry if you want to use other software with the NPClient protocol and it doesn&apos;t work automatically.
+
+Starting tracking will again overwrite the DLL locations.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disable one of the protocols if game is confused by presence of both at the same time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/proto-mouse/lang/zh_CN.ts b/proto-mouse/lang/zh_CN.ts
new file mode 100644
index 00000000..3449ab53
--- /dev/null
+++ b/proto-mouse/lang/zh_CN.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UICMOUSEControls</name>
+ <message>
+ <source>Mouse protocol settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map mouse X to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Map mouse Y to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select Number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Z</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>X axis sensitivity</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Y axis sensitivity</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/proto-simconnect/lang/zh_CN.ts b/proto-simconnect/lang/zh_CN.ts
new file mode 100644
index 00000000..73608a68
--- /dev/null
+++ b/proto-simconnect/lang/zh_CN.ts
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UICSCControls</name>
+ <message>
+ <source>Protocol settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FSX version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RTM</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SP1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SP2 -- Acceleration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Prepar3d SP2 XPACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Steam FSX (older)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Steam FSX (new)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>You need to install SimConnect SDK for your FSX version. For the Steam version, choose SP1 in the above combo box.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>simconnect</name>
+ <message>
+ <source>dll load failed -- %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/proto-udp/lang/zh_CN.ts b/proto-udp/lang/zh_CN.ts
new file mode 100644
index 00000000..d415ef0e
--- /dev/null
+++ b/proto-udp/lang/zh_CN.ts
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UICFTNControls</name>
+ <message>
+ <source>UDP protocol settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remote IP address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Port</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>udp</name>
+ <message>
+ <source>Can&apos;t bind socket: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/proto-vjoystick/lang/zh_CN.ts b/proto-vjoystick/lang/zh_CN.ts
new file mode 100644
index 00000000..1a85a52f
--- /dev/null
+++ b/proto-vjoystick/lang/zh_CN.ts
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>vjoystick</name>
+ <message>
+ <source>VJoy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Go to the &lt;a href=&quot;http://vjoystick.sourceforge.net/site/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;vjoystick&lt;/span&gt;&lt;/a&gt; project site or &lt;a href=&quot;https://sourceforge.net/projects/vjoystick/files/latest/download&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;download directly&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/spline/lang/zh_CN.ts b/spline/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/spline/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/tracker-aruco/lang/zh_CN.ts b/tracker-aruco/lang/zh_CN.ts
new file mode 100644
index 00000000..1967ee70
--- /dev/null
+++ b/tracker-aruco/lang/zh_CN.ts
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>Form</name>
+ <message>
+ <source>Tracker settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Read the &lt;a href=&quot;https://github.com/opentrack/opentrack/wiki/Aruco-tracker&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;wiki page&lt;/span&gt;&lt;/a&gt; and especially the last paragraph before printing markers.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Diagonal FOV</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>640x480</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>320x240</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default (not recommended!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>30</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>60</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>75</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>125</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>200</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Camera name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frames per second</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Resolution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Camera settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Model rotation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Head X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Head Y</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Head Z </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Toggle calibration</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-freepie-udp/lang/zh_CN.ts b/tracker-freepie-udp/lang/zh_CN.ts
new file mode 100644
index 00000000..53710990
--- /dev/null
+++ b/tracker-freepie-udp/lang/zh_CN.ts
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UI_freepie_udp_dialog</name>
+ <message>
+ <source>Tracker settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>UDP port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Axis order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>output yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>input yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>input pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>input roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>output pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>output roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add to axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>+90</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>-90</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>+180</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>-180</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-fusion/lang/zh_CN.ts b/tracker-fusion/lang/zh_CN.ts
new file mode 100644
index 00000000..fd5cb84f
--- /dev/null
+++ b/tracker-fusion/lang/zh_CN.ts
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>fusion_dialog</name>
+ <message>
+ <source>Fusion tracker only works when distinct trackers are selected for rotation and position.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fusion_tracker</name>
+ <message>
+ <source>Fusion tracker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Trackers not selected.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select different trackers for rotation and position.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fusion_ui</name>
+ <message>
+ <source>Fusion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Set distinct trackers for rotation and position input.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Configure the trackers on the main window. It&apos;s required that they&apos;re both distinct, and both are set to something.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rotation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-hatire/lang/zh_CN.ts b/tracker-hatire/lang/zh_CN.ts
new file mode 100644
index 00000000..5ccf7fe1
--- /dev/null
+++ b/tracker-hatire/lang/zh_CN.ts
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UIHATControls</name>
+ <message>
+ <source>Head Arduino Tracker settings FaceTrackNoIR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Serial port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Buggy serial port uses too much CPU</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Workaround</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zero</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Axis Configuration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Associate Axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RotX</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RotY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RotZ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable Axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pitch:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invert</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Y:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invert Axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>X:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Z</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Roll:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Z:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Status</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Trame per seconde</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>tps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Info:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HAT STOPPED</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Command</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arduino Commands</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Init</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Command for Start send sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Command for Initialising Arduino</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Command for Stop send sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Command for read Center Gyro arduino</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Command for Reset Arduino</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Command for reset Center Gyro arduino</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Little or Big Endian for &lt;span style=&quot; font-family:&apos;Arial,Geneva,Helvetica,sans-serif&apos;; font-size:medium; color:#000000;&quot;&gt;the serialization of byte order&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Arial,Geneva,Helvetica,sans-serif&apos;; font-size:medium; color:#000000;&quot;&gt;Arduino is LittleEndian ( unchecked)&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Endian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Indicate at opentrack speed sketch FPS to adjust CPU &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Delay before Init command in ms&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Delay after Init command in ms&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Delay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Delay after Start Command in ms&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Delay after startup</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Serial Parameters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Flow control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop bits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Parity</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BaudRate:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Data bits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;FTNoIR HAT Plugin&lt;br /&gt;by FuraX49&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://hatire.sourceforge.net/&quot;&gt;&lt;span style=&quot; font-size:8pt; font-weight:600; text-decoration: underline; color:#0000ff;&quot;&gt;Manual (external)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Version 1.0.0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disable when not in use, will have a performance impact</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable logging to diagnostic file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dialog_hatire</name>
+ <message>
+ <source>Version %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HAT START</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HAT STOPPED</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>hatire</name>
+ <message>
+ <source>Unable to open ComPort: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>hatire_thread</name>
+ <message>
+ <source>Timeout during writing command</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>COM port not open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Setting serial port name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Opening serial port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Port Open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Port Parameters set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Raising DTR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Raising RTS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Waiting on init</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Port setup, waiting for HAT frames to process</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-hydra/lang/zh_CN.ts b/tracker-hydra/lang/zh_CN.ts
new file mode 100644
index 00000000..f5440284
--- /dev/null
+++ b/tracker-hydra/lang/zh_CN.ts
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UIHydraControls</name>
+ <message>
+ <source>Sixense Hydra tracker settings FaceTrackNoIR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>None whatsoever</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-joystick/lang/zh_CN.ts b/tracker-joystick/lang/zh_CN.ts
new file mode 100644
index 00000000..9a6e7747
--- /dev/null
+++ b/tracker-joystick/lang/zh_CN.ts
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UIJoystickControls</name>
+ <message>
+ <source>Tracker settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Device</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mapping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Joystick axis #1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Joystick axis #2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Joystick axis #3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Joystick axis #4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Joystick axis #5</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Joystick axis #6</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Joystick axis #7</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Joystick axis #8</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Z</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-pt/lang/zh_CN.ts b/tracker-pt/lang/zh_CN.ts
new file mode 100644
index 00000000..2a8e9ca0
--- /dev/null
+++ b/tracker-pt/lang/zh_CN.ts
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>TrackerDialog_PT</name>
+ <message>
+ <source>Brightness %1/255</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LED radius %1 pixels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 yaw samples. Yaw more to %2 samples for stable calibration.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 pitch samples. Pitch more to %2 samples for stable calibration.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 samples. Over %2, good!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop calibration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start calibration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1x%2 @ %3 FPS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 OK!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 BAD!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tracker offline</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UICPTClientControls</name>
+ <message>
+ <source>PointTracker Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Status</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Extracted Points:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Camera Info:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Camera</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Camera settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>°</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Diagonal field of view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Width</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FPS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Desired capture height</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> px</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dynamic pose timeout</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Desired capture framerate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> Hz</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Desired capture width</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Height</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> ms</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Device</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Camera settings (when available)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Color channels used</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Natural</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Red only</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Blue only</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dynamic pose (for caps only, never clips)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Point extraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Threshold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Min size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Max size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Intensity threshold for point extraction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable, slider sets point size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Automatic threshold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maximum point diameter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Minimum point diameter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Model</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Model Dimensions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> mm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Side</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Front</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cap</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Custom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>z:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>x:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Location of the two remaining model points&lt;br/&gt;with respect to the reference point in default pose&lt;/p&gt;&lt;p&gt;Use any units you want, not necessarily centimeters.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>y:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:16pt;&quot;&gt;P&lt;/span&gt;&lt;span style=&quot; font-size:16pt; vertical-align:sub;&quot;&gt;3&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:16pt;&quot;&gt;P&lt;/span&gt;&lt;span style=&quot; font-size:16pt; vertical-align:sub;&quot;&gt;2&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Model position</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use only yaw and pitch while calibrating.
+Don&apos;t roll or change position.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start calibration</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;FTNoIR PointTracker Plugin&lt;br/&gt;Version 1.1&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;by Patrick Ruoff&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://ftnoirpt.sourceforge.net/&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline; color:#0000ff;&quot;&gt;Manual (external)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-pt/module/lang/zh_CN.ts b/tracker-pt/module/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/tracker-pt/module/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/tracker-rift-025/lang/zh_CN.ts b/tracker-rift-025/lang/zh_CN.ts
new file mode 100644
index 00000000..cf2a32a9
--- /dev/null
+++ b/tracker-rift-025/lang/zh_CN.ts
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>dialog_rift_025</name>
+ <message>
+ <source>Oculus Rift tracker settings FaceTrackNoIR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw spring</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Constant drift</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Deadzone</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>rift_tracker_025</name>
+ <message>
+ <source>Unable to create Rift sensor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unable to enumerate Rift tracker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unable to start Rift tracker</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-rift-042/lang/zh_CN.ts b/tracker-rift-042/lang/zh_CN.ts
new file mode 100644
index 00000000..91f96f55
--- /dev/null
+++ b/tracker-rift-042/lang/zh_CN.ts
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>dialog_rift_042</name>
+ <message>
+ <source>Oculus Rift tracker settings FaceTrackNoIR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw spring</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Constant drift</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Deadzone</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>rift_tracker_042</name>
+ <message>
+ <source>Unable to start Rift tracker: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-rift-080/lang/zh_CN.ts b/tracker-rift-080/lang/zh_CN.ts
new file mode 100644
index 00000000..d0ea9fe0
--- /dev/null
+++ b/tracker-rift-080/lang/zh_CN.ts
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>dialog_rift_080</name>
+ <message>
+ <source>Oculus Rift tracker settings FaceTrackNoIR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw spring</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Constant drift</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Deadzone</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-rift-140/lang/zh_CN.ts b/tracker-rift-140/lang/zh_CN.ts
new file mode 100644
index 00000000..d0b352bb
--- /dev/null
+++ b/tracker-rift-140/lang/zh_CN.ts
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>dialog_rift_140</name>
+ <message>
+ <source>Oculus Rift tracker settings FaceTrackNoIR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw spring</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Constant drift</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Deadzone</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-rs/lang/zh_CN.ts b/tracker-rs/lang/zh_CN.ts
new file mode 100644
index 00000000..4f82f60d
--- /dev/null
+++ b/tracker-rs/lang/zh_CN.ts
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>RSTracker</name>
+ <message>
+ <source>Intel® RealSense™ Runtime Installation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Installation process failed to start.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn&apos;t initialize RealSense tracking. Please make sure SDK Runtime 2016 R2 is installed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tracking stopped after the RealSense SDK Runtime execution has aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tracking stopped after another program changed camera streams configuration.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Install Runtime</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UIRSControls</name>
+ <message>
+ <source>RealSense 3D Tracker settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>There is no configuration available at the moment.
+
+The application will activate your camera for face tracking by the
+Intel® RealSense™ SDK. By design, the application has no direct access
+to any camera images.
+
+In order to use this tracker, you need a PC equipped with an Intel® RealSense™
+F200 or SR300 camera and the RealSense™ SDK 2016 R2 runtime.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Install Runtime</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-s2bot/lang/zh_CN.ts b/tracker-s2bot/lang/zh_CN.ts
new file mode 100644
index 00000000..692400cf
--- /dev/null
+++ b/tracker-s2bot/lang/zh_CN.ts
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UI_s2bot_dialog</name>
+ <message>
+ <source>Tracker settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Update frequency (Hz)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Axis order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>output yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>input yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>input pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>input roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>input bearing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>output pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>output roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add to axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>+90</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>-90</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>+180</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>-180</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-steamvr/lang/zh_CN.ts b/tracker-steamvr/lang/zh_CN.ts
new file mode 100644
index 00000000..9c2782ac
--- /dev/null
+++ b/tracker-steamvr/lang/zh_CN.ts
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>dialog</name>
+ <message>
+ <source>Valve SteamVR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Device</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>steamvr</name>
+ <message>
+ <source>No HMD connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Can&apos;t find device with that serial</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-test/lang/zh_CN.ts b/tracker-test/lang/zh_CN.ts
new file mode 100644
index 00000000..ddba8441
--- /dev/null
+++ b/tracker-test/lang/zh_CN.ts
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>test_ui</name>
+ <message>
+ <source>Sine wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pressing &quot;Abort&quot; will immediately crash the application.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-tobii-eyex/lang/zh_CN.ts b/tracker-tobii-eyex/lang/zh_CN.ts
new file mode 100644
index 00000000..57899430
--- /dev/null
+++ b/tracker-tobii-eyex/lang/zh_CN.ts
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>tobii_eyex_dialog_widgets</name>
+ <message>
+ <source>Tracker options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tracking settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Accumulative mode shifts the view toward a target that may be offscreen then fixes upon it.
+On the other hand, the snap mode allows for a quick glance outside the field of vision.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tracking mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Accumulative mode settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Screen edge length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Speed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Max yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Max pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Position output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Snap mode settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-udp/lang/zh_CN.ts b/tracker-udp/lang/zh_CN.ts
new file mode 100644
index 00000000..6b8cddea
--- /dev/null
+++ b/tracker-udp/lang/zh_CN.ts
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UICFTNClientControls</name>
+ <message>
+ <source>UDP tracker settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Port</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add to axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>+90</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>-90</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>+180</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>-180</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>udp</name>
+ <message>
+ <source>Can&apos;t bind socket -- %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tracker-wii/lang/zh_CN.ts b/tracker-wii/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/tracker-wii/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/tracker-wii/wiiyourself/lang/zh_CN.ts b/tracker-wii/wiiyourself/lang/zh_CN.ts
new file mode 100644
index 00000000..6401616d
--- /dev/null
+++ b/tracker-wii/wiiyourself/lang/zh_CN.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+</TS>
diff --git a/variant/default/lang/zh_CN.ts b/variant/default/lang/zh_CN.ts
new file mode 100644
index 00000000..83062231
--- /dev/null
+++ b/variant/default/lang/zh_CN.ts
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>UI_new_config</name>
+ <message>
+ <source>Config filename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>New file name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>main_window</name>
+ <message>
+ <source>Raw tracker data</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Z</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yaw</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Game data</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Profile</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mapping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tracking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>🔨</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Running as root is bad</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do not run as root. Set correct device node permissions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Running as root is bad, seriously</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do not run as root. I&apos;ll keep whining at every startup.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Running as root is really seriously bad</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do not run as root. Be annoyed, comprehensively.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Create new empty config</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Create new copied config</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open configuration directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>opentrack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> (debug)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show the Octopus</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hide the Octopus</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tracker settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Protocol settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mappings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Exit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Octopus is sad</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Check permissions for your .ini directory:
+
+&quot;%1&quot;%2
+
+Exiting now.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> :: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>new_file_dialog</name>
+ <message>
+ <source>File exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This file already exists. Pick another name.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>