aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Attorney_Online.pro4
-rw-r--r--include/discord_rich_presence.h4
-rw-r--r--resource/translations/ao_de.qmbin0 -> 22162 bytes
-rw-r--r--resource/translations/ao_de.ts889
-rw-r--r--resource/translations/ao_en.qmbin0 -> 23 bytes
-rw-r--r--resource/translations/ao_en.ts773
-rw-r--r--resource/translations/ao_ja.qmbin0 -> 2051 bytes
-rw-r--r--resource/translations/ao_ja.ts773
-rw-r--r--resources.qrc3
-rw-r--r--src/aoapplication.cpp6
-rw-r--r--src/charselect.cpp2
-rw-r--r--src/courtroom.cpp2
-rw-r--r--src/debug_functions.cpp9
-rw-r--r--src/evidence.cpp4
-rw-r--r--src/lobby.cpp10
-rw-r--r--src/main.cpp13
-rw-r--r--src/packet_distribution.cpp25
17 files changed, 2490 insertions, 27 deletions
diff --git a/Attorney_Online.pro b/Attorney_Online.pro
index 20a61d36..7e597b45 100644
--- a/Attorney_Online.pro
+++ b/Attorney_Online.pro
@@ -41,5 +41,9 @@ CONFIG += c++14
RESOURCES += resources.qrc
+TRANSLATIONS = resource/translations/ao_en.ts \
+ resource/translations/ao_ja.ts \
+ resource/translations/ao_de.ts
+
win32:RC_ICONS = resource/logo.ico
macx:ICON = resource/logo.icns
diff --git a/include/discord_rich_presence.h b/include/discord_rich_presence.h
index e7ecc6ef..4115b516 100644
--- a/include/discord_rich_presence.h
+++ b/include/discord_rich_presence.h
@@ -5,6 +5,8 @@
#include <ctime>
#include <QDebug>
#include <string>
+#include <QCoreApplication>
+
#include <discord-rpc.h>
#include <cstring>
@@ -16,6 +18,8 @@ namespace AttorneyOnline {
class Discord
{
+ Q_DECLARE_TR_FUNCTIONS(Discord)
+
private:
const char* APPLICATION_ID = "399779271737868288";
std::string server_name, server_id;
diff --git a/resource/translations/ao_de.qm b/resource/translations/ao_de.qm
new file mode 100644
index 00000000..1f4defe0
--- /dev/null
+++ b/resource/translations/ao_de.qm
Binary files differ
diff --git a/resource/translations/ao_de.ts b/resource/translations/ao_de.ts
new file mode 100644
index 00000000..11af5570
--- /dev/null
+++ b/resource/translations/ao_de.ts
@@ -0,0 +1,889 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE">
+<context>
+ <name>AOApplication</name>
+ <message>
+ <location filename="../src/aoapplication.cpp" line="138"/>
+ <source>Disconnected from server.</source>
+ <translation>Vom Server getrennt.</translation>
+ </message>
+ <message>
+ <source>Error connecting to master server. Will try again in %n seconds.</source>
+ <translation type="vanished">Fehler bei der Verbindung zum Master Server. Erneuter Versuch in %n Sekunden.</translation>
+ </message>
+ <message>
+ <location filename="../src/aoapplication.cpp" line="168"/>
+ <source>There was an error connecting to the master server.
+We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one.
+Please check your Internet connection and firewall, and please try again.</source>
+ <translation>Es gab einen Fehler beim Verbinden zum Master Server.
+Wir verwenden mehrere Master Server um Ausfälle zu verhindern, jedoch hat der Client alle Möglichkeiten einen zu finden erschöpft.
+Bitte prüfe deine Internetverbindung und Firewall, und versuche es erneut.</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="106"/>
+ <source>Outdated version! Your version: %1
+Please go to aceattorneyonline.com to update.</source>
+ <translation>Version zu alt! Deine Version: %1
+Bitte besuche aceattorneyonline.com für ein Update.</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="114"/>
+ <source>You have been exiled from AO.
+Have a nice day.</source>
+ <translation>Du wurdest von AO befreit.
+Schönen Urlaub.</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="249"/>
+ <source>Attorney Online 2</source>
+ <translation>Attorney Online 2</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="275"/>
+ <source>Loading</source>
+ <translation>Laden</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="363"/>
+ <source>Loading evidence:
+%1/%2</source>
+ <translation>Lade Beweisstücke:
+%1/%2</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="395"/>
+ <location filename="../src/packet_distribution.cpp" line="490"/>
+ <source>Loading music:
+%1/%2</source>
+ <translation>Lade Musik:
+%1/%2</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="467"/>
+ <source>Loading chars:
+%1/%2</source>
+ <translation>Lade Charaktere:
+%1/%2</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="642"/>
+ <source>You have been kicked from the server.
+Reason: </source>
+ <translation>Du wurdest von diesem Server geschmissen.
+Grund: </translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="659"/>
+ <source>You are banned on this server.
+Reason: </source>
+ <translation>Du wurdest von diesem Server verbannt.
+Grund: </translation>
+ </message>
+ <message>
+ <source>You have been kicked.</source>
+ <translation type="vanished">Du wurdest rausgeschmissen.</translation>
+ </message>
+ <message>
+ <source>You are banned on this server.</source>
+ <translation type="vanished">Du wurdest verbannt.</translation>
+ </message>
+</context>
+<context>
+ <name>AOCaseAnnouncerDialog</name>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="9"/>
+ <source>Case Announcer</source>
+ <translation>Fallansager</translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="38"/>
+ <source>Case title:</source>
+ <translation>Fallname:</translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="48"/>
+ <source>Defense needed</source>
+ <translation>Verteidiger benötigt</translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="50"/>
+ <source>Prosecution needed</source>
+ <translation>Kläger benötigt</translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="52"/>
+ <source>Judge needed</source>
+ <translation>Richter benötigt</translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="54"/>
+ <source>Jurors needed</source>
+ <translation>Jury benötigt</translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="56"/>
+ <source>Stenographer needed</source>
+ <translation>Stenograph benötigt</translation>
+ </message>
+</context>
+<context>
+ <name>AOOptionsDialog</name>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="11"/>
+ <source>Settings</source>
+ <translation>Einstellungen</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="40"/>
+ <source>Gameplay</source>
+ <translation>Spiel</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="51"/>
+ <source>Theme:</source>
+ <translation>Theme:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="52"/>
+ <source>Sets the theme used in-game. If the new theme changes the lobby&apos;s look as well, you&apos;ll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it.</source>
+ <translation>Setzt das Theme. Wenn das neue Theme auch das Aussehen der Lobby verändert, must du diese neu laden um die Änderungen zu sehen.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="81"/>
+ <source>Log goes downwards:</source>
+ <translation>Verlauf geht nach unten:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="82"/>
+ <source>If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked.</source>
+ <translation>Wenn angehakt werden neue Nachrichten unten erscheinen (wie beim OOC). Das traditionelle (AO1) Verhalten wäre nicht angehakt.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="94"/>
+ <source>Log length:</source>
+ <translation>Länge:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="95"/>
+ <source>The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as &apos;infinite&apos;.</source>
+ <translation>Die Menge an Nachrichten die aufgehoben werden bevor alte gelöscht werden. 0 bedeutet unendlich.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="113"/>
+ <source>Default username:</source>
+ <translation>Standard Benutzername:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="114"/>
+ <source>Your OOC name will be automatically set to this value when you join a server.</source>
+ <translation>Dein OOC Name wird automatisch auf dies gesetzt.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="126"/>
+ <source>Custom shownames:</source>
+ <translation>Eigener Anzeigename:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="127"/>
+ <source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
+ <translation>Standardwert für die Anzeigename Box, welche den In-Charakter Namen bestimmt.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="145"/>
+ <source>Backup MS:</source>
+ <translation>Rückfall MS:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="146"/>
+ <source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
+ <translation>Wenn dereingebaute Master Server fehlschlägt, wird das Spiel diesen hier verwenden.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="158"/>
+ <source>Discord:</source>
+ <translation>Discord:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="159"/>
+ <source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
+ <translation>Erlaubt anderen auf Discord zu sehen auf welchem Server du spielst, welchen Charakter du spielst und wie lange.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="172"/>
+ <source>Callwords</source>
+ <translation>Alarmwörter</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="197"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Gib so viele Alarmwörter ein wie du möchtest. Groß/Kleinschreibung ist egal. Für jede Wort nur eine Zeile!&lt;br&gt;Bitte keine leere Zeile am Ende -- du bekommst sonst bei jeder Nachricht einen Alarm.&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="204"/>
+ <source>Audio</source>
+ <translation>Audio</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="215"/>
+ <source>Audio device:</source>
+ <translation>Audiogerät:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="216"/>
+ <source>Sets the audio device for all sounds.</source>
+ <translation>Setzt das Audiogerät für all Geräusche.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="247"/>
+ <source>Music:</source>
+ <translation>Musik:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="248"/>
+ <source>Sets the music&apos;s default volume.</source>
+ <translation>Setzt die Musiklautstärke.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="260"/>
+ <source>SFX:</source>
+ <translation>SFX:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="261"/>
+ <source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
+ <translation>Setzt die Lautstärke der Soundeffekte wie Einsprüche und die Geräusche der Charaktere.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="274"/>
+ <source>Blips:</source>
+ <translation>Blips:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="275"/>
+ <source>Sets the volume of the blips, the talking sound effects.</source>
+ <translation>Setzt die Lautstärke der Blips, das ist das Geräusch das die Charaktere beim Reden machen.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="293"/>
+ <source>Blip rate:</source>
+ <translation>Bliprate:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="294"/>
+ <source>Sets the delay between playing the blip sounds.</source>
+ <translation>Setzt die Pause zwischen einzelnen Blips.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="305"/>
+ <source>Blank blips:</source>
+ <translation>Leere Blips:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="306"/>
+ <source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
+ <translation>Wenn angehakt wird das Spiel auch bei einem Leerzeichen einen Blip machen.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="319"/>
+ <source>Casing</source>
+ <translation>Fälle</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="333"/>
+ <source>This server supports case alerts.</source>
+ <translation>Dieser Server unterstützt Fallalarme.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="335"/>
+ <source>This server does not support case alerts.</source>
+ <translation>Dieser Server unterstützt Fallalarme nicht.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="336"/>
+ <source>Pretty self-explanatory.</source>
+ <translation>Eigentlich selbsterklärend.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="343"/>
+ <source>Casing:</source>
+ <translation>Fälle:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="344"/>
+ <source>If checked, you will get alerts about case announcements.</source>
+ <translation>Wenn angehakt wirst du benachrichtigt wenn ein Fall angekündigt wird.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="357"/>
+ <source>Defense:</source>
+ <translation>Verteidigung:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="358"/>
+ <source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
+ <translation>Wenn angehakt wirst du benachrichtigt wenn ein Verteidiger benötigt wird.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="371"/>
+ <source>Prosecution:</source>
+ <translation>Kläger:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="372"/>
+ <source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
+ <translation>Wenn angehakt wirst du benachrichtigt wenn ein Kläger benötigt wird.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="385"/>
+ <source>Judge:</source>
+ <translation>Richter:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="386"/>
+ <source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
+ <translation>Wenn angehakt wirst du benachrichtigt wenn ein Richter benötigt wird.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="399"/>
+ <source>Juror:</source>
+ <translation>Jury:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="400"/>
+ <source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
+ <translation>Wenn angehakt wirst du benachrichtigt wenn eine Jury benötigt wird.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="413"/>
+ <source>Stenographer:</source>
+ <translation>Stenograph:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="414"/>
+ <source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
+ <translation>Wenn angehakt wirst du benachrichtigt wenn ein Stenograph benötigt wird.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="427"/>
+ <source>CM:</source>
+ <translation>CM:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="428"/>
+ <source>If checked, you will appear amongst the potential CMs on the server.</source>
+ <translation>Wenn angehakt wirst du als potentielle CM angezeigt.</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="441"/>
+ <source>Hosting cases:</source>
+ <translation>Fallleitung:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="442"/>
+ <source>If you&apos;re a CM, enter what cases you are willing to host.</source>
+ <translation>Wenn du CM bist, gib ein welche Fälle du spielen möchtest.</translation>
+ </message>
+</context>
+<context>
+ <name>Courtroom</name>
+ <message>
+ <location filename="../src/charselect.cpp" line="21"/>
+ <source>Password</source>
+ <translation>Passwort</translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="27"/>
+ <source>Spectator</source>
+ <translation>Zuschauer</translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="30"/>
+ <location filename="../src/courtroom.cpp" line="138"/>
+ <source>Search</source>
+ <translation>Suche</translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="35"/>
+ <source>Passworded</source>
+ <translation>Gesperrt</translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="39"/>
+ <source>Taken</source>
+ <translation>Benutzt</translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="217"/>
+ <source>Generating chars:
+</source>
+ <translation>Generiere Charaktere:
+</translation>
+ </message>
+ <message>
+ <source>Could not find %1</source>
+ <translation type="vanished">Konnte %1 nicht finden.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="116"/>
+ <source>Showname</source>
+ <translation>Anzeigename</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="120"/>
+ <source>Message</source>
+ <translation>Nachricht</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="130"/>
+ <source>Name</source>
+ <translation>Name</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="183"/>
+ <source>Pre</source>
+ <translation>Vor</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="186"/>
+ <source>Flip</source>
+ <translation>Spiegeln</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="190"/>
+ <source>Guard</source>
+ <translation>Wache</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="195"/>
+ <source>Casing</source>
+ <translation>Fall</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="200"/>
+ <source>Shownames</source>
+ <translation>Anzeigenamen</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="203"/>
+ <source>No Interrupt</source>
+ <translation>Keine Unterbrechung</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="217"/>
+ <source>White</source>
+ <translation>Weiß</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="218"/>
+ <source>Green</source>
+ <translation>Grün</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="219"/>
+ <source>Red</source>
+ <translation>Rot</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="220"/>
+ <source>Orange</source>
+ <translation>Orange</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="221"/>
+ <source>Blue</source>
+ <translation>Blau</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="222"/>
+ <source>Yellow</source>
+ <translation>Gelb</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="vanished">Musik</translation>
+ </message>
+ <message>
+ <source>Sfx</source>
+ <translation type="vanished">Sfx</translation>
+ </message>
+ <message>
+ <source>Blips</source>
+ <translation type="vanished">Blips</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2959"/>
+ <source>Server</source>
+ <translation>Server</translation>
+ </message>
+ <message>
+ <source>Change character</source>
+ <translation type="vanished">Charakter ändern</translation>
+ </message>
+ <message>
+ <source>Reload theme</source>
+ <translation type="vanished">Aussehen neu laden</translation>
+ </message>
+ <message>
+ <source>Call mod</source>
+ <translation type="vanished">Moderator rufen</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="692"/>
+ <source>Back to Lobby</source>
+ <translation>Zurück zur Lobby</translation>
+ </message>
+ <message>
+ <source>You have been banned.</source>
+ <translation type="vanished">Du wurdest verbannt.</translation>
+ </message>
+ <message>
+ <source>%1 has played a song: %2</source>
+ <translation type="vanished">%1 hat ein Lied gespielt: %2</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="223"/>
+ <source>Rainbow</source>
+ <translation>Regenbogen</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="224"/>
+ <source>Pink</source>
+ <translation>Pink</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="225"/>
+ <source>Cyan</source>
+ <translation>Cyan</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2681"/>
+ <source>You were granted the Guard button.</source>
+ <translation>Dir wurde der Wache Knopf gegeben.</translation>
+ </message>
+ <message>
+ <source>This does nohing, but there you go.</source>
+ <translation type="vanished">Dies bewirkt nichts, aber egal.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2688"/>
+ <source>This does nothing, but there you go.</source>
+ <translation>Dies bewirkt nichts, aber egal.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2695"/>
+ <source>You opened the settings menu.</source>
+ <translation>Du hast die Einstellungen geöffnet.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2710"/>
+ <source>You will now pair up with </source>
+ <translation>Du wirst nun mit </translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2712"/>
+ <source> if they also choose your character in return.</source>
+ <translation> gepaart, wenn der andere dies auch tut.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2718"/>
+ <source>You are no longer paired with anyone.</source>
+ <translation>Du bist nicht mehr gepaart.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2723"/>
+ <source>Are you sure you typed that well? The char ID could not be recognised.</source>
+ <translation>Hast du dich vertippt? Die ID konnte nicht erkannt werden.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2739"/>
+ <source>You have set your offset to </source>
+ <translation>Dein Abstand ist auf </translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2746"/>
+ <source>Your offset must be between -100% and 100%!</source>
+ <translation>Der Abstand muss zwischen -100% und 100% liegen!</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2751"/>
+ <source>That offset does not look like one.</source>
+ <translation>Das sieht nicht wie ein Abstand aus.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2757"/>
+ <source>You switched your music and area list.</source>
+ <translation>Du hast zwischen Musik- und Gebitsliste umgeschaltet.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2764"/>
+ <source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
+ <translation>Du hast Funktionen erzwungen die der Server eventuell nicht unterstützt. Möglicherweise wirst du nicht mehr sprechen können.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2775"/>
+ <source>Your pre-animations interrupt again.</source>
+ <translation>Deine Voranimation unterbrechen nun Text.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2777"/>
+ <source>Your pre-animations will not interrupt text.</source>
+ <translation>Deine Voranimation unterbrechen Text nicht.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2788"/>
+ <source>Couldn&apos;t open chatlog.txt to write into.</source>
+ <translation>Konnte chatlog.txt nicht öffnen.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2801"/>
+ <source>The IC chatlog has been saved.</source>
+ <translation>Der IC Verlauf wurde gespeichert.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2813"/>
+ <source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
+ <translation>Du hattest keinen &apos;base/cases&apos; Ordner! Ich hab ihn nun angelegt aber bedenke das er leer sein wird.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2824"/>
+ <source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
+Cases you can load: </source>
+ <translation>Du musst einen Dateinamen angeben (ohne .ini). Stelle sicher das er im &apos;base/cases&apos; Ordner ist und das er korrekt formatiert ist.
+Verfügbare Fälle: </translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2832"/>
+ <source>Too many arguments to load a case! You only need one filename, without extension.</source>
+ <translation>Zu viele Argumente! Du brauchst nur den Dateinamen, ohne Erweiterung.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2845"/>
+ <source>Case made by </source>
+ <translation>Fall von </translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2851"/>
+ <source>Navigate to </source>
+ <translation>Gehe zu </translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2851"/>
+ <source> for the CM doc.</source>
+ <translation> für das CM Dokument.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2870"/>
+ <source>Your case &quot;</source>
+ <translation>Dein Fall &quot;</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2870"/>
+ <source>&quot; was loaded!</source>
+ <translation>&quot; wurde geladen!</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2882"/>
+ <source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
+ <translation>Du hattest keinen &apos;base/cases&apos; Ordner! Ich hab ihn nun angelegt aber bedenke das er leer sein wird.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2893"/>
+ <source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
+ <translation>Du musst einen Dateinamen (ohne Erweiterung) angebenn, sowie den Gebietsstatus!</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2901"/>
+ <source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
+ <translation>Zu viele Argumente! Du brauchst nur den Dateinamen, ohne Erweiterung sowie den Gebietsstatus!</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2923"/>
+ <source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
+ <translation>Erfolgreich gespeichert!</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2951"/>
+ <source>Master</source>
+ <translation>Master</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3422"/>
+ <source>Reason:</source>
+ <translation>Grund:</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3423"/>
+ <source>Call Moderator</source>
+ <translation>Moderator rufen</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3431"/>
+ <location filename="../src/courtroom.cpp" line="3434"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3431"/>
+ <source>You must provide a reason.</source>
+ <translation>Du musst einen Grund angeben.</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3434"/>
+ <source>The message is too long.</source>
+ <translation>Die Nachricht ist zu lang.</translation>
+ </message>
+ <message>
+ <source>Choose..</source>
+ <translation type="vanished">Wähle..</translation>
+ </message>
+ <message>
+ <location filename="../src/evidence.cpp" line="25"/>
+ <source>Choose...</source>
+ <translation>Wähle...</translation>
+ </message>
+ <message>
+ <location filename="../src/evidence.cpp" line="194"/>
+ <source>Images (*.png)</source>
+ <translation>Bilder (*.png)</translation>
+ </message>
+ <message>
+ <location filename="../src/evidence.cpp" line="268"/>
+ <source>Add new evidence...</source>
+ <translation>Neues Beweisstück...</translation>
+ </message>
+</context>
+<context>
+ <name>Discord</name>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="34"/>
+ <location filename="../src/discord_rich_presence.cpp" line="49"/>
+ <location filename="../src/discord_rich_presence.cpp" line="75"/>
+ <location filename="../src/discord_rich_presence.cpp" line="94"/>
+ <source>Objection!</source>
+ <translation>Einspruch!</translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="37"/>
+ <source>In Lobby</source>
+ <translation>In Lobby</translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="38"/>
+ <source>Idle</source>
+ <translation>Untätig</translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="54"/>
+ <source>In a Server</source>
+ <translation>In einem Server</translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="69"/>
+ <source>Playing as %1</source>
+ <translation>Spielt als %1</translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="100"/>
+ <source>Spectating</source>
+ <translation>Zuschauend</translation>
+ </message>
+</context>
+<context>
+ <name>Lobby</name>
+ <message>
+ <source>Attorney Online 2</source>
+ <translation type="vanished">Attorney Online 2</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation type="vanished">Name</translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="74"/>
+ <source>It doesn&apos;t look like your client is set up correctly.
+Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
+ <translation>Dein Client ist nicht korrekt eingerichtet.
+Hast du ALLES von tiny.cc/getao heruntergeladen und entpackt, auch den großen &apos;base&apos; Ordner?</translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="147"/>
+ <source>Loading</source>
+ <translation>Laden</translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="151"/>
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="270"/>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</source>
+ <translation>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Der Gerichtsdrama Simulator&lt;p&gt;&lt;b&gt;Quelltext:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Leitende Entwicklung:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Danksagungen:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation>
+ </message>
+ <message>
+ <source>Attorney Online 2 is built using Qt 5.11.
+
+Lead development:
+longbyte1
+OmniTroid
+
+stonedDiscord
+Supporting development:
+Fiercy
+
+UI design:
+Ruekasu
+Draxirch
+
+Special thanks:
+Unishred
+Argoneus
+Noevain
+Cronnicossy</source>
+ <translation type="vanished">Attorney Online 2 wurde gemacht mit Qt 5.11.
+
+Leitende Entwicklung:
+longbyte1
+OmniTroid
+stonedDiscord
+
+Unterstützende Entwicklung:
+Fiercy
+
+UI Design:
+Ruekasu
+Draxirch
+
+Speziellen Dank:
+Unishred
+Argoneus
+Noevain
+Cronnicossy</translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="316"/>
+ <source>Offline</source>
+ <translation>Offline</translation>
+ </message>
+</context>
+<context>
+ <name>debug_functions</name>
+ <message>
+ <location filename="../src/debug_functions.cpp" line="10"/>
+ <source>Error: %1</source>
+ <translation>Fehler: %1</translation>
+ </message>
+ <message>
+ <location filename="../src/debug_functions.cpp" line="11"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../src/debug_functions.cpp" line="23"/>
+ <source>Notice</source>
+ <translation>Hinweis</translation>
+ </message>
+</context>
+</TS>
diff --git a/resource/translations/ao_en.qm b/resource/translations/ao_en.qm
new file mode 100644
index 00000000..9dad8dff
--- /dev/null
+++ b/resource/translations/ao_en.qm
Binary files differ
diff --git a/resource/translations/ao_en.ts b/resource/translations/ao_en.ts
new file mode 100644
index 00000000..2128630b
--- /dev/null
+++ b/resource/translations/ao_en.ts
@@ -0,0 +1,773 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="en_US">
+<context>
+ <name>AOApplication</name>
+ <message>
+ <location filename="../src/aoapplication.cpp" line="138"/>
+ <source>Disconnected from server.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aoapplication.cpp" line="168"/>
+ <source>There was an error connecting to the master server.
+We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one.
+Please check your Internet connection and firewall, and please try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="106"/>
+ <source>Outdated version! Your version: %1
+Please go to aceattorneyonline.com to update.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="114"/>
+ <source>You have been exiled from AO.
+Have a nice day.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="249"/>
+ <source>Attorney Online 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="275"/>
+ <source>Loading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="363"/>
+ <source>Loading evidence:
+%1/%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="395"/>
+ <location filename="../src/packet_distribution.cpp" line="490"/>
+ <source>Loading music:
+%1/%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="467"/>
+ <source>Loading chars:
+%1/%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="642"/>
+ <source>You have been kicked from the server.
+Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="659"/>
+ <source>You are banned on this server.
+Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AOCaseAnnouncerDialog</name>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="9"/>
+ <source>Case Announcer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="38"/>
+ <source>Case title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="48"/>
+ <source>Defense needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="50"/>
+ <source>Prosecution needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="52"/>
+ <source>Judge needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="54"/>
+ <source>Jurors needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="56"/>
+ <source>Stenographer needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AOOptionsDialog</name>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="11"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="40"/>
+ <source>Gameplay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="51"/>
+ <source>Theme:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="52"/>
+ <source>Sets the theme used in-game. If the new theme changes the lobby&apos;s look as well, you&apos;ll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="81"/>
+ <source>Log goes downwards:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="82"/>
+ <source>If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="94"/>
+ <source>Log length:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="95"/>
+ <source>The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as &apos;infinite&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="113"/>
+ <source>Default username:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="114"/>
+ <source>Your OOC name will be automatically set to this value when you join a server.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="126"/>
+ <source>Custom shownames:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="127"/>
+ <source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="145"/>
+ <source>Backup MS:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="146"/>
+ <source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="158"/>
+ <source>Discord:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="159"/>
+ <source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="172"/>
+ <source>Callwords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="197"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="204"/>
+ <source>Audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="215"/>
+ <source>Audio device:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="216"/>
+ <source>Sets the audio device for all sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="247"/>
+ <source>Music:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="248"/>
+ <source>Sets the music&apos;s default volume.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="260"/>
+ <source>SFX:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="261"/>
+ <source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="274"/>
+ <source>Blips:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="275"/>
+ <source>Sets the volume of the blips, the talking sound effects.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="293"/>
+ <source>Blip rate:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="294"/>
+ <source>Sets the delay between playing the blip sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="305"/>
+ <source>Blank blips:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="306"/>
+ <source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="319"/>
+ <source>Casing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="333"/>
+ <source>This server supports case alerts.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="335"/>
+ <source>This server does not support case alerts.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="336"/>
+ <source>Pretty self-explanatory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="343"/>
+ <source>Casing:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="344"/>
+ <source>If checked, you will get alerts about case announcements.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="357"/>
+ <source>Defense:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="358"/>
+ <source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="371"/>
+ <source>Prosecution:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="372"/>
+ <source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="385"/>
+ <source>Judge:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="386"/>
+ <source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="399"/>
+ <source>Juror:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="400"/>
+ <source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="413"/>
+ <source>Stenographer:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="414"/>
+ <source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="427"/>
+ <source>CM:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="428"/>
+ <source>If checked, you will appear amongst the potential CMs on the server.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="441"/>
+ <source>Hosting cases:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="442"/>
+ <source>If you&apos;re a CM, enter what cases you are willing to host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Courtroom</name>
+ <message>
+ <location filename="../src/charselect.cpp" line="21"/>
+ <source>Password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="27"/>
+ <source>Spectator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="30"/>
+ <location filename="../src/courtroom.cpp" line="138"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="35"/>
+ <source>Passworded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="39"/>
+ <source>Taken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="217"/>
+ <source>Generating chars:
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="116"/>
+ <source>Showname</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="120"/>
+ <source>Message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="130"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="183"/>
+ <source>Pre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="186"/>
+ <source>Flip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="190"/>
+ <source>Guard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="195"/>
+ <source>Casing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="200"/>
+ <source>Shownames</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="203"/>
+ <source>No Interrupt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="217"/>
+ <source>White</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="218"/>
+ <source>Green</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="219"/>
+ <source>Red</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="220"/>
+ <source>Orange</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="221"/>
+ <source>Blue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="222"/>
+ <source>Yellow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2688"/>
+ <source>This does nothing, but there you go.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2959"/>
+ <source>Server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="692"/>
+ <source>Back to Lobby</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="223"/>
+ <source>Rainbow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="224"/>
+ <source>Pink</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="225"/>
+ <source>Cyan</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2681"/>
+ <source>You were granted the Guard button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2695"/>
+ <source>You opened the settings menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2710"/>
+ <source>You will now pair up with </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2712"/>
+ <source> if they also choose your character in return.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2718"/>
+ <source>You are no longer paired with anyone.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2723"/>
+ <source>Are you sure you typed that well? The char ID could not be recognised.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2739"/>
+ <source>You have set your offset to </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2746"/>
+ <source>Your offset must be between -100% and 100%!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2751"/>
+ <source>That offset does not look like one.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2757"/>
+ <source>You switched your music and area list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2764"/>
+ <source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2775"/>
+ <source>Your pre-animations interrupt again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2777"/>
+ <source>Your pre-animations will not interrupt text.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2788"/>
+ <source>Couldn&apos;t open chatlog.txt to write into.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2801"/>
+ <source>The IC chatlog has been saved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2813"/>
+ <source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2824"/>
+ <source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
+Cases you can load: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2832"/>
+ <source>Too many arguments to load a case! You only need one filename, without extension.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2845"/>
+ <source>Case made by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2851"/>
+ <source>Navigate to </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2851"/>
+ <source> for the CM doc.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2870"/>
+ <source>Your case &quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2870"/>
+ <source>&quot; was loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2882"/>
+ <source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2893"/>
+ <source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2901"/>
+ <source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2923"/>
+ <source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2951"/>
+ <source>Master</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3422"/>
+ <source>Reason:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3423"/>
+ <source>Call Moderator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3431"/>
+ <location filename="../src/courtroom.cpp" line="3434"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3431"/>
+ <source>You must provide a reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3434"/>
+ <source>The message is too long.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/evidence.cpp" line="25"/>
+ <source>Choose...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/evidence.cpp" line="194"/>
+ <source>Images (*.png)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/evidence.cpp" line="268"/>
+ <source>Add new evidence...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Discord</name>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="34"/>
+ <location filename="../src/discord_rich_presence.cpp" line="49"/>
+ <location filename="../src/discord_rich_presence.cpp" line="75"/>
+ <location filename="../src/discord_rich_presence.cpp" line="94"/>
+ <source>Objection!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="37"/>
+ <source>In Lobby</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="38"/>
+ <source>Idle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="54"/>
+ <source>In a Server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="69"/>
+ <source>Playing as %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="100"/>
+ <source>Spectating</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Lobby</name>
+ <message>
+ <location filename="../src/lobby.cpp" line="74"/>
+ <source>It doesn&apos;t look like your client is set up correctly.
+Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="147"/>
+ <source>Loading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="151"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="270"/>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="316"/>
+ <source>Offline</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>debug_functions</name>
+ <message>
+ <location filename="../src/debug_functions.cpp" line="10"/>
+ <source>Error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/debug_functions.cpp" line="11"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/debug_functions.cpp" line="23"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/resource/translations/ao_ja.qm b/resource/translations/ao_ja.qm
new file mode 100644
index 00000000..2e7093ac
--- /dev/null
+++ b/resource/translations/ao_ja.qm
Binary files differ
diff --git a/resource/translations/ao_ja.ts b/resource/translations/ao_ja.ts
new file mode 100644
index 00000000..7d3eb8b0
--- /dev/null
+++ b/resource/translations/ao_ja.ts
@@ -0,0 +1,773 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ja_JP">
+<context>
+ <name>AOApplication</name>
+ <message>
+ <location filename="../src/aoapplication.cpp" line="138"/>
+ <source>Disconnected from server.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aoapplication.cpp" line="168"/>
+ <source>There was an error connecting to the master server.
+We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one.
+Please check your Internet connection and firewall, and please try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="106"/>
+ <source>Outdated version! Your version: %1
+Please go to aceattorneyonline.com to update.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="114"/>
+ <source>You have been exiled from AO.
+Have a nice day.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="249"/>
+ <source>Attorney Online 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="275"/>
+ <source>Loading</source>
+ <translation>ロード中</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="363"/>
+ <source>Loading evidence:
+%1/%2</source>
+ <translation>証拠がロード中: %1/%2</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="395"/>
+ <location filename="../src/packet_distribution.cpp" line="490"/>
+ <source>Loading music:
+%1/%2</source>
+ <translation>音楽がロード中: %1/%2</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="467"/>
+ <source>Loading chars:
+%1/%2</source>
+ <translation>キャラがロード中: %1/%2</translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="642"/>
+ <source>You have been kicked from the server.
+Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/packet_distribution.cpp" line="659"/>
+ <source>You are banned on this server.
+Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AOCaseAnnouncerDialog</name>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="9"/>
+ <source>Case Announcer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="38"/>
+ <source>Case title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="48"/>
+ <source>Defense needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="50"/>
+ <source>Prosecution needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="52"/>
+ <source>Judge needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="54"/>
+ <source>Jurors needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aocaseannouncerdialog.cpp" line="56"/>
+ <source>Stenographer needed</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AOOptionsDialog</name>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="11"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="40"/>
+ <source>Gameplay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="51"/>
+ <source>Theme:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="52"/>
+ <source>Sets the theme used in-game. If the new theme changes the lobby&apos;s look as well, you&apos;ll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="81"/>
+ <source>Log goes downwards:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="82"/>
+ <source>If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="94"/>
+ <source>Log length:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="95"/>
+ <source>The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as &apos;infinite&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="113"/>
+ <source>Default username:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="114"/>
+ <source>Your OOC name will be automatically set to this value when you join a server.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="126"/>
+ <source>Custom shownames:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="127"/>
+ <source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="145"/>
+ <source>Backup MS:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="146"/>
+ <source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="158"/>
+ <source>Discord:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="159"/>
+ <source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="172"/>
+ <source>Callwords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="197"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="204"/>
+ <source>Audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="215"/>
+ <source>Audio device:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="216"/>
+ <source>Sets the audio device for all sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="247"/>
+ <source>Music:</source>
+ <translation>音楽:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="248"/>
+ <source>Sets the music&apos;s default volume.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="260"/>
+ <source>SFX:</source>
+ <translation>効果音:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="261"/>
+ <source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="274"/>
+ <source>Blips:</source>
+ <translation>ブリップ:</translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="275"/>
+ <source>Sets the volume of the blips, the talking sound effects.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="293"/>
+ <source>Blip rate:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="294"/>
+ <source>Sets the delay between playing the blip sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="305"/>
+ <source>Blank blips:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="306"/>
+ <source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="319"/>
+ <source>Casing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="333"/>
+ <source>This server supports case alerts.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="335"/>
+ <source>This server does not support case alerts.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="336"/>
+ <source>Pretty self-explanatory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="343"/>
+ <source>Casing:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="344"/>
+ <source>If checked, you will get alerts about case announcements.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="357"/>
+ <source>Defense:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="358"/>
+ <source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="371"/>
+ <source>Prosecution:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="372"/>
+ <source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="385"/>
+ <source>Judge:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="386"/>
+ <source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="399"/>
+ <source>Juror:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="400"/>
+ <source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="413"/>
+ <source>Stenographer:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="414"/>
+ <source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="427"/>
+ <source>CM:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="428"/>
+ <source>If checked, you will appear amongst the potential CMs on the server.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="441"/>
+ <source>Hosting cases:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/aooptionsdialog.cpp" line="442"/>
+ <source>If you&apos;re a CM, enter what cases you are willing to host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Courtroom</name>
+ <message>
+ <location filename="../src/charselect.cpp" line="21"/>
+ <source>Password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="27"/>
+ <source>Spectator</source>
+ <translation>観客</translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="30"/>
+ <location filename="../src/courtroom.cpp" line="138"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="35"/>
+ <source>Passworded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="39"/>
+ <source>Taken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/charselect.cpp" line="217"/>
+ <source>Generating chars:
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="116"/>
+ <source>Showname</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="120"/>
+ <source>Message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="130"/>
+ <source>Name</source>
+ <translation>名前</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="183"/>
+ <source>Pre</source>
+ <translation>前</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="186"/>
+ <source>Flip</source>
+ <translation>フリップ</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="190"/>
+ <source>Guard</source>
+ <translation>ガード</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="195"/>
+ <source>Casing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="200"/>
+ <source>Shownames</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="203"/>
+ <source>No Interrupt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="217"/>
+ <source>White</source>
+ <translation>白</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="218"/>
+ <source>Green</source>
+ <translation>緑</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="219"/>
+ <source>Red</source>
+ <translation>赤</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="220"/>
+ <source>Orange</source>
+ <translation>オレンジ</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="221"/>
+ <source>Blue</source>
+ <translation>青</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="222"/>
+ <source>Yellow</source>
+ <translation>黄色</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2688"/>
+ <source>This does nothing, but there you go.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2959"/>
+ <source>Server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="692"/>
+ <source>Back to Lobby</source>
+ <translation>ロビーに戻る</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="223"/>
+ <source>Rainbow</source>
+ <translation>虹</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="224"/>
+ <source>Pink</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="225"/>
+ <source>Cyan</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2681"/>
+ <source>You were granted the Guard button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2695"/>
+ <source>You opened the settings menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2710"/>
+ <source>You will now pair up with </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2712"/>
+ <source> if they also choose your character in return.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2718"/>
+ <source>You are no longer paired with anyone.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2723"/>
+ <source>Are you sure you typed that well? The char ID could not be recognised.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2739"/>
+ <source>You have set your offset to </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2746"/>
+ <source>Your offset must be between -100% and 100%!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2751"/>
+ <source>That offset does not look like one.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2757"/>
+ <source>You switched your music and area list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2764"/>
+ <source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2775"/>
+ <source>Your pre-animations interrupt again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2777"/>
+ <source>Your pre-animations will not interrupt text.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2788"/>
+ <source>Couldn&apos;t open chatlog.txt to write into.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2801"/>
+ <source>The IC chatlog has been saved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2813"/>
+ <source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2824"/>
+ <source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini.
+Cases you can load: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2832"/>
+ <source>Too many arguments to load a case! You only need one filename, without extension.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2845"/>
+ <source>Case made by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2851"/>
+ <source>Navigate to </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2851"/>
+ <source> for the CM doc.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2870"/>
+ <source>Your case &quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2870"/>
+ <source>&quot; was loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2882"/>
+ <source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2893"/>
+ <source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2901"/>
+ <source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2923"/>
+ <source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="2951"/>
+ <source>Master</source>
+ <translation>マスター</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3422"/>
+ <source>Reason:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3423"/>
+ <source>Call Moderator</source>
+ <translation>モデレーターを呼ぶ</translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3431"/>
+ <location filename="../src/courtroom.cpp" line="3434"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3431"/>
+ <source>You must provide a reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/courtroom.cpp" line="3434"/>
+ <source>The message is too long.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/evidence.cpp" line="25"/>
+ <source>Choose...</source>
+ <translation>選択...</translation>
+ </message>
+ <message>
+ <location filename="../src/evidence.cpp" line="194"/>
+ <source>Images (*.png)</source>
+ <translation>イメージ (*.png)</translation>
+ </message>
+ <message>
+ <location filename="../src/evidence.cpp" line="268"/>
+ <source>Add new evidence...</source>
+ <translation>新しい証拠を付け加える...</translation>
+ </message>
+</context>
+<context>
+ <name>Discord</name>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="34"/>
+ <location filename="../src/discord_rich_presence.cpp" line="49"/>
+ <location filename="../src/discord_rich_presence.cpp" line="75"/>
+ <location filename="../src/discord_rich_presence.cpp" line="94"/>
+ <source>Objection!</source>
+ <translation>意義あり!</translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="37"/>
+ <source>In Lobby</source>
+ <translation>ロビーでいる</translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="38"/>
+ <source>Idle</source>
+ <translation>落ちている</translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="54"/>
+ <source>In a Server</source>
+ <translation>サーバーでいます</translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="69"/>
+ <source>Playing as %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/discord_rich_presence.cpp" line="100"/>
+ <source>Spectating</source>
+ <translation>観客している</translation>
+ </message>
+</context>
+<context>
+ <name>Lobby</name>
+ <message>
+ <location filename="../src/lobby.cpp" line="74"/>
+ <source>It doesn&apos;t look like your client is set up correctly.
+Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="147"/>
+ <source>Loading</source>
+ <translation>ロード中</translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="151"/>
+ <source>Cancel</source>
+ <translation>キャンセル</translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="270"/>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/lobby.cpp" line="316"/>
+ <source>Offline</source>
+ <translation>オフライン</translation>
+ </message>
+</context>
+<context>
+ <name>debug_functions</name>
+ <message>
+ <location filename="../src/debug_functions.cpp" line="10"/>
+ <source>Error: %1</source>
+ <translation>エラー: %1</translation>
+ </message>
+ <message>
+ <location filename="../src/debug_functions.cpp" line="11"/>
+ <source>Error</source>
+ <translation>エラー</translation>
+ </message>
+ <message>
+ <location filename="../src/debug_functions.cpp" line="23"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/resources.qrc b/resources.qrc
index bc9f322e..81f2d8fc 100644
--- a/resources.qrc
+++ b/resources.qrc
@@ -2,5 +2,8 @@
<qresource prefix="/">
<file>resource/fonts/Ace-Attorney.ttf</file>
<file>resource/logo.png</file>
+ <file>resource/translations/ao_de.qm</file>
+ <file>resource/translations/ao_en.qm</file>
+ <file>resource/translations/ao_ja.qm</file>
</qresource>
</RCC>
diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp
index 4ef1edd3..c47f3507 100644
--- a/src/aoapplication.cpp
+++ b/src/aoapplication.cpp
@@ -135,7 +135,7 @@ void AOApplication::server_disconnected()
{
if (courtroom_constructed)
{
- call_notice("Disconnected from server.");
+ call_notice(tr("Disconnected from server."));
construct_lobby();
destruct_courtroom();
}
@@ -165,11 +165,11 @@ void AOApplication::ms_connect_finished(bool connected, bool will_retry)
}
else
{
- call_error("There was an error connecting to the master server.\n"
+ call_error(tr("There was an error connecting to the master server.\n"
"We deploy multiple master servers to mitigate any possible downtime, "
"but the client appears to have exhausted all possible methods of finding "
"and connecting to one.\n"
- "Please check your Internet connection and firewall, and please try again.");
+ "Please check your Internet connection and firewall, and please try again."));
}
}
}
diff --git a/src/charselect.cpp b/src/charselect.cpp
index 4987cf57..58c990ba 100644
--- a/src/charselect.cpp
+++ b/src/charselect.cpp
@@ -214,7 +214,7 @@ void Courtroom::character_loading_finished()
int total_loading_size = ao_app->char_list_size * 2 + ao_app->evidence_list_size + ao_app->music_list_size;
int loading_value = int(((ao_app->loaded_chars + ao_app->generated_chars + ao_app->loaded_music + ao_app->loaded_evidence) / static_cast<double>(total_loading_size)) * 100);
ao_app->w_lobby->set_loading_value(loading_value);
- ao_app->w_lobby->set_loading_text("Generating chars:\n" + QString::number(ao_app->generated_chars) + "/" + QString::number(ao_app->char_list_size));
+ ao_app->w_lobby->set_loading_text(tr("Generating chars:\n") + QString::number(ao_app->generated_chars) + "/" + QString::number(ao_app->char_list_size));
}
}
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 7907b543..2ba3ba2c 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -2685,7 +2685,7 @@ void Courtroom::on_ooc_return_pressed()
//ui_text_color->addItem("Rainbow");
ui_ooc_chat_message->clear();
//rainbow_appended = true;
- append_server_chatmessage("CLIENT", tr("This does nohing, but there you go."), "1");
+ append_server_chatmessage("CLIENT", tr("This does nothing, but there you go."), "1");
return;
}
else if (ooc_message.startsWith("/settings"))
diff --git a/src/debug_functions.cpp b/src/debug_functions.cpp
index 77f2f35a..a790610d 100644
--- a/src/debug_functions.cpp
+++ b/src/debug_functions.cpp
@@ -1,11 +1,14 @@
+#include <QMessageBox>
+#include <QCoreApplication>
+
#include "debug_functions.h"
void call_error(QString p_message)
{
QMessageBox *msgBox = new QMessageBox;
- msgBox->setText("Error: " + p_message);
- msgBox->setWindowTitle("Error");
+ msgBox->setText(QCoreApplication::translate("debug_functions", "Error: %1").arg(p_message));
+ msgBox->setWindowTitle(QCoreApplication::translate("debug_functions", "Error"));
//msgBox->setWindowModality(Qt::NonModal);
@@ -17,7 +20,7 @@ void call_notice(QString p_message)
QMessageBox *msgBox = new QMessageBox;
msgBox->setText(p_message);
- msgBox->setWindowTitle("Notice");
+ msgBox->setWindowTitle(QCoreApplication::translate("debug_functions", "Notice"));
//msgBox->setWindowModality(Qt::NonModal);
diff --git a/src/evidence.cpp b/src/evidence.cpp
index ebef7490..341bed0f 100644
--- a/src/evidence.cpp
+++ b/src/evidence.cpp
@@ -22,7 +22,7 @@ void Courtroom::construct_evidence()
ui_evidence_delete = new AOButton(ui_evidence_overlay, ao_app);
ui_evidence_image_name = new AOLineEdit(ui_evidence_overlay);
ui_evidence_image_button = new AOButton(ui_evidence_overlay, ao_app);
- ui_evidence_image_button->setText("Choose..");
+ ui_evidence_image_button->setText(tr("Choose..."));
ui_evidence_x = new AOButton(ui_evidence_overlay, ao_app);
ui_evidence_description = new AOTextEdit(ui_evidence_overlay);
@@ -265,7 +265,7 @@ void Courtroom::on_evidence_hover(int p_id, bool p_state)
if (p_state)
{
if (final_id == local_evidence_list.size())
- ui_evidence_name->setText("Add new evidence...");
+ ui_evidence_name->setText(tr("Add new evidence..."));
else if (final_id < local_evidence_list.size())
ui_evidence_name->setText(local_evidence_list.at(final_id).name);
}
diff --git a/src/lobby.cpp b/src/lobby.cpp
index 4a96e567..776528c9 100644
--- a/src/lobby.cpp
+++ b/src/lobby.cpp
@@ -71,9 +71,9 @@ void Lobby::set_widgets()
qDebug() << "W: did not find lobby width or height in " << filename;
// Most common symptom of bad config files and missing assets.
- call_notice("It doesn't look like your client is set up correctly.\n"
+ call_notice(tr("It doesn't look like your client is set up correctly.\n"
"Did you download all resources correctly from tiny.cc/getao, "
- "including the large 'base' folder?");
+ "including the large 'base' folder?"));
this->resize(517, 666);
}
@@ -144,11 +144,11 @@ void Lobby::set_widgets()
ui_loading_text->setFrameStyle(QFrame::NoFrame);
ui_loading_text->setStyleSheet("background-color: rgba(0, 0, 0, 0);"
"color: rgba(255, 128, 0, 255);");
- ui_loading_text->append("Loading");
+ ui_loading_text->append(tr("Loading"));
set_size_and_pos(ui_progress_bar, "progress_bar");
set_size_and_pos(ui_cancel, "cancel");
- ui_cancel->setText("Cancel");
+ ui_cancel->setText(tr("Cancel"));
ui_loading_background->hide();
@@ -313,7 +313,7 @@ void Lobby::on_server_list_clicked(QModelIndex p_model)
ui_description->moveCursor(QTextCursor::Start);
ui_description->ensureCursorVisible();
- ui_player_count->setText("Offline");
+ ui_player_count->setText(tr("Offline"));
ui_connect->setEnabled(false);
diff --git a/src/main.cpp b/src/main.cpp
index 80ea93bb..7c2daa66 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -7,6 +7,9 @@
#include "courtroom.h"
#include <QPluginLoader>
#include <QDebug>
+#include <QTranslator>
+#include <QLibraryInfo>
+
int main(int argc, char *argv[])
{
#if QT_VERSION > QT_VERSION_CHECK(5, 6, 0)
@@ -17,6 +20,16 @@ int main(int argc, char *argv[])
#endif
AOApplication main_app(argc, argv);
+
+ QTranslator qtTranslator;
+ qtTranslator.load("qt_" + QLocale::system().name(),
+ QLibraryInfo::location(QLibraryInfo::TranslationsPath));
+ main_app.installTranslator(&qtTranslator);
+
+ QTranslator appTranslator;
+ appTranslator.load("ao_" + QLocale::system().name(),":/resource/translations/");
+ main_app.installTranslator(&appTranslator);
+
main_app.construct_lobby();
main_app.net_manager->connect_to_master();
main_app.w_lobby->show();
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp
index 942c275d..2bd26936 100644
--- a/src/packet_distribution.cpp
+++ b/src/packet_distribution.cpp
@@ -103,15 +103,16 @@ void AOApplication::ms_packet_received(AOPacket *p_packet)
}
}
- call_notice("Outdated version! Your version: " + get_version_string()
- + "\nPlease go to aceattorneyonline.com to update.");
+ call_notice(tr("Outdated version! Your version: %1\n"
+ "Please go to aceattorneyonline.com to update.")
+ .arg(get_version_string()));
destruct_courtroom();
destruct_lobby();
}
else if (header == "DOOM")
{
- call_notice("You have been exiled from AO."
- "Have a nice day.");
+ call_notice(tr("You have been exiled from AO.\n"
+ "Have a nice day."));
destruct_courtroom();
destruct_lobby();
}
@@ -245,7 +246,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
courtroom_loaded = false;
- QString window_title = "Attorney Online 2";
+ QString window_title = tr("Attorney Online 2");
int selected_server = w_lobby->get_selected_server();
QString server_address = "", server_name = "";
@@ -271,7 +272,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
w_courtroom->set_window_title(window_title);
w_lobby->show_loading_overlay();
- w_lobby->set_loading_text("Loading");
+ w_lobby->set_loading_text(tr("Loading"));
w_lobby->set_loading_value(0);
AOPacket *f_packet;
@@ -359,7 +360,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
++loaded_evidence;
- w_lobby->set_loading_text("Loading evidence:\n" + QString::number(loaded_evidence) + "/" + QString::number(evidence_list_size));
+ w_lobby->set_loading_text(tr("Loading evidence:\n%1/%2").arg(QString::number(loaded_evidence)).arg(QString::number(evidence_list_size)));
w_courtroom->append_evidence(f_evi);
@@ -391,7 +392,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
++loaded_music;
- w_lobby->set_loading_text("Loading music:\n" + QString::number(loaded_music) + "/" + QString::number(music_list_size));
+ w_lobby->set_loading_text(tr("Loading music:\n%1/%2").arg(QString::number(loaded_music)).arg(QString::number(music_list_size)));
if (musics_time)
{
@@ -463,7 +464,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
++loaded_chars;
- w_lobby->set_loading_text("Loading chars:\n" + QString::number(loaded_chars) + "/" + QString::number(char_list_size));
+ w_lobby->set_loading_text(tr("Loading chars:\n%1/%2").arg(QString::number(loaded_chars)).arg(QString::number(char_list_size)));
w_courtroom->append_char(f_char);
@@ -486,7 +487,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
{
++loaded_music;
- w_lobby->set_loading_text("Loading music:\n" + QString::number(loaded_music) + "/" + QString::number(music_list_size));
+ w_lobby->set_loading_text(tr("Loading music:\n%1/%2").arg(QString::number(loaded_music)).arg(QString::number(music_list_size)));
if (musics_time)
{
@@ -638,7 +639,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
{
if (courtroom_constructed && f_contents.size() >= 1)
{
- call_notice("You have been kicked from the server.\nReason: " + f_contents.at(0));
+ call_notice(tr("You have been kicked from the server.\nReason: ") + f_contents.at(0));
construct_lobby();
destruct_courtroom();
}
@@ -655,7 +656,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
}
else if (header == "BD")
{
- call_notice("You are banned on this server.\nReason: " + f_contents.at(0));
+ call_notice(tr("You are banned on this server.\nReason: ") + f_contents.at(0));
}
else if (header == "ZZ")
{