aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Attorney_Online.pro6
-rw-r--r--include/aooptionsdialog.h2
-rw-r--r--include/discord_rich_presence.h4
-rw-r--r--resource/translations/ao_de.qmbin0 -> 23500 bytes
-rw-r--r--resource/translations/ao_de.ts982
-rw-r--r--resource/translations/ao_en.qmbin0 -> 23 bytes
-rw-r--r--resource/translations/ao_en.ts826
-rw-r--r--resource/translations/ao_es.qmbin0 -> 23447 bytes
-rw-r--r--resource/translations/ao_es.ts881
-rw-r--r--resource/translations/ao_jp.qmbin0 -> 2004 bytes
-rw-r--r--resource/translations/ao_jp.ts849
-rw-r--r--resource/translations/ao_ru.qmbin0 -> 21968 bytes
-rw-r--r--resource/translations/ao_ru.ts855
-rw-r--r--resources.qrc5
-rw-r--r--src/aoapplication.cpp9
-rw-r--r--src/aooptionsdialog.cpp16
-rw-r--r--src/charselect.cpp2
-rw-r--r--src/courtroom.cpp36
-rw-r--r--src/debug_functions.cpp9
-rw-r--r--src/evidence.cpp4
-rw-r--r--src/lobby.cpp20
-rw-r--r--src/main.cpp21
-rw-r--r--src/packet_distribution.cpp27
23 files changed, 4501 insertions, 53 deletions
diff --git a/Attorney_Online.pro b/Attorney_Online.pro
index aefd5140..32781a1b 100644
--- a/Attorney_Online.pro
+++ b/Attorney_Online.pro
@@ -41,5 +41,11 @@ CONFIG += c++14
RESOURCES += resources.qrc
+TRANSLATIONS = resource/translations/ao_en.ts \
+ resource/translations/ao_jp.ts \
+ resource/translations/ao_de.ts \
+ resource/translations/ao_ru.ts \
+ resource/translations/ao_es.ts
+
win32:RC_ICONS = resource/logo.ico
macx:ICON = resource/logo.icns
diff --git a/include/aooptionsdialog.h b/include/aooptionsdialog.h
index a65e3f59..83b84cbc 100644
--- a/include/aooptionsdialog.h
+++ b/include/aooptionsdialog.h
@@ -55,6 +55,8 @@ private:
QLineEdit *ui_ms_textbox;
QLabel *ui_discord_lbl;
QCheckBox *ui_discord_cb;
+ QLabel *ui_language_label;
+ QComboBox *ui_language_combobox;
QWidget *ui_callwords_tab;
QWidget *ui_callwords_widget;
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..6fd250de
--- /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..1c0675b9
--- /dev/null
+++ b/resource/translations/ao_de.ts
@@ -0,0 +1,982 @@
+<?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>
+ <location filename="../../src/aoapplication.cpp" line="163"/>
+ <source>Error connecting to master server. Will try again in %1 seconds.</source>
+ <translation>Fehler bei der Verbindung zum Master Server. Erneuter Versuch in %1 Sekunden.</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="167"/>
+ <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: %1</source>
+ <translation>Du wurdest von diesem Server geschmissen.
+Grund: %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="651"/>
+ <source>You have been banned from the server.
+Reason: %1</source>
+ <translation>Du wurdest von diesem Server verbannt.
+Grund: %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="659"/>
+ <source>You are banned on this server.
+Reason: %1</source>
+ <translation>Du bist von diesem Server verbannt.
+Grund: %1</translation>
+ </message>
+ <message>
+ <source>You have been kicked from the server.
+Reason: </source>
+ <translation type="vanished">Du wurdest von diesem Server geschmissen.
+Grund: </translation>
+ </message>
+ <message>
+ <source>You are banned on this server.
+Reason: </source>
+ <translation type="vanished">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="171"/>
+ <source>Language:</source>
+ <translation>Sprache:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <source>Sets the language if you don&apos;t want to use your system language.</source>
+ <translation>Setzte die Sprache falls du nicht die Systemsprache verwenden möchtest.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="186"/>
+ <source>Callwords</source>
+ <translation>Alarmwörter</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="211"/>
+ <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="217"/>
+ <source>Audio</source>
+ <translation>Audio</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="228"/>
+ <source>Audio device:</source>
+ <translation>Audiogerät:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="229"/>
+ <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="263"/>
+ <source>Music:</source>
+ <translation>Musik:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <source>Sets the music&apos;s default volume.</source>
+ <translation>Setzt die Musiklautstärke.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="276"/>
+ <source>SFX:</source>
+ <translation>SFX:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <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="290"/>
+ <source>Blips:</source>
+ <translation>Blips:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <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="309"/>
+ <source>Blip rate:</source>
+ <translation>Bliprate:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="310"/>
+ <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="321"/>
+ <source>Blank blips:</source>
+ <translation>Leere Blips:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <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="334"/>
+ <source>Casing</source>
+ <translation>Fälle</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
+ <source>This server supports case alerts.</source>
+ <translation>Dieser Server unterstützt Fallalarme.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="350"/>
+ <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="351"/>
+ <source>Pretty self-explanatory.</source>
+ <translation>Eigentlich selbsterklärend.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="358"/>
+ <source>Casing:</source>
+ <translation>Fälle:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="359"/>
+ <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="372"/>
+ <source>Defense:</source>
+ <translation>Verteidigung:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="373"/>
+ <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="386"/>
+ <source>Prosecution:</source>
+ <translation>Kläger:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="387"/>
+ <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="400"/>
+ <source>Judge:</source>
+ <translation>Richter:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="401"/>
+ <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="414"/>
+ <source>Juror:</source>
+ <translation>Jury:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="415"/>
+ <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="428"/>
+ <source>Stenographer:</source>
+ <translation>Stenograph:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="429"/>
+ <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="442"/>
+ <source>CM:</source>
+ <translation>CM:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="443"/>
+ <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="456"/>
+ <source>Hosting cases:</source>
+ <translation>Fallleitung:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="457"/>
+ <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:
+%1/%2</source>
+ <translation>Generiere Charaktere:
+%1/%2</translation>
+ </message>
+ <message>
+ <source>Generating chars:
+</source>
+ <translation type="vanished">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"/>
+ <location filename="../../src/courtroom.cpp" line="608"/>
+ <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>
+ <location filename="../../src/courtroom.cpp" line="566"/>
+ <source>Music</source>
+ <translation>Musik</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="568"/>
+ <source>Sfx</source>
+ <translation>Sfx</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="570"/>
+ <source>Blips</source>
+ <translation>Blips</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="573"/>
+ <source>Log limit</source>
+ <translation>Verlaufsgrenze</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="583"/>
+ <location filename="../../src/courtroom.cpp" line="2959"/>
+ <source>Server</source>
+ <translation>Server</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="596"/>
+ <source>Change character</source>
+ <translation>Charakter ändern</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="599"/>
+ <source>Reload theme</source>
+ <translation>Aussehen neu laden</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="602"/>
+ <source>Call mod</source>
+ <translation>Moderator rufen</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="605"/>
+ <source>Settings</source>
+ <translation>Einstellungen</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="611"/>
+ <source>A/M</source>
+ <translation>A/M</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="614"/>
+ <source>Preanim</source>
+ <translation>Voranimation</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="248"/>
+ <source>% offset</source>
+ <translation>% Abstand</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: %1</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: %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2845"/>
+ <source>Case made by %1.</source>
+ <translation>Fall von %1.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2851"/>
+ <source>Navigate to %1 for the CM doc.</source>
+ <translation>Gehe zu %1 für das CM Dokument.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2870"/>
+ <source>Your case &quot;%1&quot; was loaded!</source>
+ <translation>Dein Fall &quot;%1&quot; wurde geladen!</translation>
+ </message>
+ <message>
+ <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="vanished">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>
+ <source>Case made by </source>
+ <translation type="vanished">Fall von </translation>
+ </message>
+ <message>
+ <source>Navigate to </source>
+ <translation type="vanished">Gehe zu </translation>
+ </message>
+ <message>
+ <source> for the CM doc.</source>
+ <translation type="vanished"> für das CM Dokument.</translation>
+ </message>
+ <message>
+ <source>Your case &quot;</source>
+ <translation type="vanished">Dein Fall &quot;</translation>
+ </message>
+ <message>
+ <source>&quot; was loaded!</source>
+ <translation type="vanished">&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>
+ <source>Objection!</source>
+ <translation type="vanished">Einspruch!</translation>
+ </message>
+ <message>
+ <source>In Lobby</source>
+ <translation type="vanished">In Lobby</translation>
+ </message>
+ <message>
+ <source>Idle</source>
+ <translation type="vanished">Untätig</translation>
+ </message>
+ <message>
+ <source>In a Server</source>
+ <translation type="vanished">In einem Server</translation>
+ </message>
+ <message>
+ <source>Playing as %1</source>
+ <translation type="vanished">Spielt als %1</translation>
+ </message>
+ <message>
+ <source>Spectating</source>
+ <translation type="vanished">Zuschauend</translation>
+ </message>
+</context>
+<context>
+ <name>Lobby</name>
+ <message>
+ <location filename="../../src/lobby.cpp" line="12"/>
+ <source>Attorney Online 2</source>
+ <translation>Attorney Online 2</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="29"/>
+ <source>Name</source>
+ <translation>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="104"/>
+ <source>Version: %1</source>
+ <translation>Version: %1</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>
+ <location filename="../../src/lobby.cpp" line="376"/>
+ <source>Online: %1/%2</source>
+ <translation>Online: %1/%2</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="114"/>
+ <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..b917a419
--- /dev/null
+++ b/resource/translations/ao_en.ts
@@ -0,0 +1,826 @@
+<?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="163"/>
+ <source>Error connecting to master server. Will try again in %1 seconds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aoapplication.cpp" line="167"/>
+ <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: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="651"/>
+ <source>You have been banned from the server.
+Reason: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="659"/>
+ <source>You are banned on this server.
+Reason: %1</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="171"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <source>Sets the language if you don&apos;t want to use your system language.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="186"/>
+ <source>Callwords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="211"/>
+ <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="217"/>
+ <source>Audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="228"/>
+ <source>Audio device:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="229"/>
+ <source>Sets the audio device for all sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="263"/>
+ <source>Music:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <source>Sets the music&apos;s default volume.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="276"/>
+ <source>SFX:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <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="290"/>
+ <source>Blips:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <source>Sets the volume of the blips, the talking sound effects.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="309"/>
+ <source>Blip rate:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="310"/>
+ <source>Sets the delay between playing the blip sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="321"/>
+ <source>Blank blips:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <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="334"/>
+ <source>Casing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
+ <source>This server supports case alerts.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="350"/>
+ <source>This server does not support case alerts.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="351"/>
+ <source>Pretty self-explanatory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="358"/>
+ <source>Casing:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="359"/>
+ <source>If checked, you will get alerts about case announcements.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="372"/>
+ <source>Defense:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="373"/>
+ <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="386"/>
+ <source>Prosecution:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="387"/>
+ <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="400"/>
+ <source>Judge:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="401"/>
+ <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="414"/>
+ <source>Juror:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="415"/>
+ <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="428"/>
+ <source>Stenographer:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="429"/>
+ <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="442"/>
+ <source>CM:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="443"/>
+ <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="456"/>
+ <source>Hosting cases:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="457"/>
+ <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:
+%1/%2</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"/>
+ <location filename="../../src/courtroom.cpp" line="608"/>
+ <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="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: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2845"/>
+ <source>Case made by %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2851"/>
+ <source>Navigate to %1 for the CM doc.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2870"/>
+ <source>Your case &quot;%1&quot; was loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="583"/>
+ <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="248"/>
+ <source>% offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="566"/>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="568"/>
+ <source>Sfx</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="570"/>
+ <source>Blips</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="573"/>
+ <source>Log limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="596"/>
+ <source>Change character</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="599"/>
+ <source>Reload theme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="602"/>
+ <source>Call mod</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="605"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="611"/>
+ <source>A/M</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="614"/>
+ <source>Preanim</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="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="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>Lobby</name>
+ <message>
+ <location filename="../../src/lobby.cpp" line="12"/>
+ <source>Attorney Online 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="29"/>
+ <source>Name</source>
+ <translation type="unfinished"></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 type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="104"/>
+ <source>Version: %1</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="376"/>
+ <source>Online: %1/%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="114"/>
+ <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_es.qm b/resource/translations/ao_es.qm
new file mode 100644
index 00000000..214af271
--- /dev/null
+++ b/resource/translations/ao_es.qm
Binary files differ
diff --git a/resource/translations/ao_es.ts b/resource/translations/ao_es.ts
new file mode 100644
index 00000000..2ccccd64
--- /dev/null
+++ b/resource/translations/ao_es.ts
@@ -0,0 +1,881 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="es">
+<context>
+ <name>AOApplication</name>
+ <message>
+ <location filename="../../src/aoapplication.cpp" line="138"/>
+ <source>Disconnected from server.</source>
+ <translation>Desconectado del servidor.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aoapplication.cpp" line="163"/>
+ <source>Error connecting to master server. Will try again in %1 seconds.</source>
+ <translation>Error al conectarse a la lista de servidores. Se intentará nuevamente en %1 segundos.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aoapplication.cpp" line="167"/>
+ <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>
+ <translatorcomment>I translated master servers as &quot;lista de servidores&quot; because literally nobody will understand if i make the literal translation &quot;servidor maestro&quot;. And in the end a master server is just a list of servers. Also removed the part about having multiple master servers, i just don&apos;t think the average user will understand this even if i do a good translation.</translatorcomment>
+ <translation>Hubo un error al obtener la lista de servidores. Verifique su conexión a Internet y firewall, y vuelva a intentarlo.</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>¡Versión desactualizada! Su versión: %1 Vaya a aceattorneyonline.com para actualizar.</translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="114"/>
+ <source>You have been exiled from AO.
+Have a nice day.</source>
+ <translation>Has sido exiliado de AO.
+Que tengas un buen día.</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>Cargando</translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="363"/>
+ <source>Loading evidence:
+%1/%2</source>
+ <translation>Cargando evidencia:
+%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>Cargando música:
+%1/%2</translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="467"/>
+ <source>Loading chars:
+%1/%2</source>
+ <translation>Cargando personajes:
+%1/%2</translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="642"/>
+ <source>You have been kicked from the server.
+Reason: %1</source>
+ <translation>Has sido expulsado del servidor.
+Razón: %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="651"/>
+ <source>You have been banned from the server.
+Reason: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="659"/>
+ <source>You are banned on this server.
+Reason: %1</source>
+ <translation>Has sido baneado en este servidor.
+Razón: %1</translation>
+ </message>
+ <message>
+ <source>You have been kicked from the server.
+Reason: </source>
+ <translation type="vanished">Has sido expulsado del servidor.
+Razón: </translation>
+ </message>
+ <message>
+ <source>You are banned on this server.
+Reason: </source>
+ <translation type="vanished">Has sido baneado en este servidor.
+Razón: </translation>
+ </message>
+</context>
+<context>
+ <name>AOCaseAnnouncerDialog</name>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="9"/>
+ <source>Case Announcer</source>
+ <translation>Anunciar caso</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="38"/>
+ <source>Case title:</source>
+ <translation>Título del caso:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="48"/>
+ <source>Defense needed</source>
+ <translation>Se necesita defensa</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="50"/>
+ <source>Prosecution needed</source>
+ <translation>Se necesita fiscal</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="52"/>
+ <source>Judge needed</source>
+ <translation>Se necesita juez</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="54"/>
+ <source>Jurors needed</source>
+ <translation>Se necesita jurado</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="56"/>
+ <source>Stenographer needed</source>
+ <translation>Se necesita taquígrafo</translation>
+ </message>
+</context>
+<context>
+ <name>AOOptionsDialog</name>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="11"/>
+ <source>Settings</source>
+ <translation>Ajustes</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="40"/>
+ <source>Gameplay</source>
+ <translation>Jugabilidad</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="51"/>
+ <source>Theme:</source>
+ <translation>Tema visual:</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>Establece el tema visual utilizado en el juego. Si el nuevo tema también cambia el aspecto del lobby, deberá volver a cargar el lobby para que los cambios surtan efecto, como unirse a un servidor y volver al lobby.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="81"/>
+ <source>Log goes downwards:</source>
+ <translation>Invertir historial IC:</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>Si está marcado, los nuevos mensajes aparecerán en la parte inferior (como el chat OOC).</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="94"/>
+ <source>Log length:</source>
+ <translation>Longitud del historial:</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>La cantidad de mensajes que mantendrá el historial del chat IC antes de eliminar mensajes más antiguos. 0 significa &apos;infinito&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="113"/>
+ <source>Default username:</source>
+ <translation>Usuario predeterminado:</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>Su nombre OOC se establecerá automáticamente a este cuando se una a un servidor.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="126"/>
+ <source>Custom shownames:</source>
+ <translation>Mostrar nombres:</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>Activa la casilla &apos;Mostrar nombres&apos; de forma predeterminada en el juego, que a su vez determina si el cliente debe mostrar nombres personalizados en los personajes.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="145"/>
+ <source>Backup MS:</source>
+ <translation>MS de respaldo:</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>Si la lista de servidores predeterminada falla, el juego probará la dirección proporcionada aquí.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="158"/>
+ <source>Discord:</source>
+ <translation></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>Permite a otros en Discord ver en qué servidor estás, qué personaje juegas y cuánto tiempo has estado jugando.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="171"/>
+ <source>Language:</source>
+ <translation>Idioma:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <source>Sets the language if you don&apos;t want to use your system language.</source>
+ <translation>Establece el idioma si no desea utilizar el idioma de su sistema.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="186"/>
+ <source>Callwords</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="211"/>
+ <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;Ingrese tantas palabras de llamada como desee.&lt;br&gt;Esto no distingue entre mayúsculas y minúsculas. ¡Asegúrese de dejar cada palabra en su propia línea!&lt;br&gt;No deje una línea con un espacio al final; recibirá una alerta cada vez que alguien use un espacio en sus mensajes.&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="217"/>
+ <source>Audio</source>
+ <translation>Audio</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="228"/>
+ <source>Audio device:</source>
+ <translation>Dispositivo:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="229"/>
+ <source>Sets the audio device for all sounds.</source>
+ <translation>Establece el dispositivo de audio.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="263"/>
+ <source>Music:</source>
+ <translation>Música:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <source>Sets the music&apos;s default volume.</source>
+ <translation>Establece el volumen predeterminado de la música.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="276"/>
+ <source>SFX:</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
+ <translation>Establece el volumen predeterminado de SFX. Las interjecciones y los efectos de sonido reales cuentan como &apos;SFX&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="290"/>
+ <source>Blips:</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <source>Sets the volume of the blips, the talking sound effects.</source>
+ <translation>Establece el volumen de los blips, el sonido al hablar.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="309"/>
+ <source>Blip rate:</source>
+ <translation>Tasa de blips:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="310"/>
+ <source>Sets the delay between playing the blip sounds.</source>
+ <translation>Establece el retraso entre la reproducción de los sonidos blip.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="321"/>
+ <source>Blank blips:</source>
+ <translation>Blips en blanco:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
+ <translation>Si está marcada, el juego reproducirá un sonido blip incluso cuando se &apos;dice&apos; un espacio.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="334"/>
+ <source>Casing</source>
+ <translation>Caso</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
+ <source>This server supports case alerts.</source>
+ <translation>Este servidor admite alertas de casos.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="350"/>
+ <source>This server does not support case alerts.</source>
+ <translation>Este servidor no admite alertas de casos.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="351"/>
+ <source>Pretty self-explanatory.</source>
+ <translation>Bastante autoexplicativo.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="358"/>
+ <source>Casing:</source>
+ <translation>Caso:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="359"/>
+ <source>If checked, you will get alerts about case announcements.</source>
+ <translation>Si está marcado, recibirá anuncios de casos.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="372"/>
+ <source>Defense:</source>
+ <translation>Defensa:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="373"/>
+ <source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
+ <translation>Si está marcado, recibirá alertas sobre anuncios de casos si hay un lugar de defensa abierto.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="386"/>
+ <source>Prosecution:</source>
+ <translation>Fiscal:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="387"/>
+ <source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
+ <translation>Si está marcada, recibirá alertas sobre anuncios de casos si hay un puesto de fiscal abierto.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="400"/>
+ <source>Judge:</source>
+ <translation>Juez:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="401"/>
+ <source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
+ <translation>Si está marcado, recibirá alertas sobre anuncios de casos si el puesto de juez está abierto.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="414"/>
+ <source>Juror:</source>
+ <translation>Jurado:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="415"/>
+ <source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
+ <translation>Si está marcado, recibirá alertas sobre anuncios de casos si hay un puesto de jurado abierto.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="428"/>
+ <source>Stenographer:</source>
+ <translation>Taquígrafo:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="429"/>
+ <source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
+ <translation>Si está marcado, recibirá alertas sobre anuncios de casos si hay un lugar de taquígrafo abierto.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="442"/>
+ <source>CM:</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="443"/>
+ <source>If checked, you will appear amongst the potential CMs on the server.</source>
+ <translation>Si está marcado, aparecerá entre los posibles CM en el servidor.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="456"/>
+ <source>Hosting cases:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="457"/>
+ <source>If you&apos;re a CM, enter what cases you are willing to host.</source>
+ <translation>Si eres un CM, ingresa qué casos estás dispuesto a organizar.</translation>
+ </message>
+</context>
+<context>
+ <name>Courtroom</name>
+ <message>
+ <location filename="../../src/charselect.cpp" line="21"/>
+ <source>Password</source>
+ <translation>Contraseña</translation>
+ </message>
+ <message>
+ <location filename="../../src/charselect.cpp" line="27"/>
+ <source>Spectator</source>
+ <translation>Espectador</translation>
+ </message>
+ <message>
+ <location filename="../../src/charselect.cpp" line="30"/>
+ <location filename="../../src/courtroom.cpp" line="138"/>
+ <source>Search</source>
+ <translation>Buscar</translation>
+ </message>
+ <message>
+ <location filename="../../src/charselect.cpp" line="35"/>
+ <source>Passworded</source>
+ <translation>Contraseña</translation>
+ </message>
+ <message>
+ <location filename="../../src/charselect.cpp" line="39"/>
+ <source>Taken</source>
+ <translation>En uso</translation>
+ </message>
+ <message>
+ <location filename="../../src/charselect.cpp" line="217"/>
+ <source>Generating chars:
+%1/%2</source>
+ <translation>Generando personajes:
+%1/%2</translation>
+ </message>
+ <message>
+ <source>Generating chars:
+</source>
+ <translation type="obsolete">Generando personajes:
+</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>Mensaje</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="130"/>
+ <source>Name</source>
+ <translation>Nombre</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>Guardia</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="195"/>
+ <location filename="../../src/courtroom.cpp" line="608"/>
+ <source>Casing</source>
+ <translation>Caso</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>Blanco</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="218"/>
+ <source>Green</source>
+ <translation>Verde</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="219"/>
+ <source>Red</source>
+ <translation>Rojo</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="220"/>
+ <source>Orange</source>
+ <translation>Naranja</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="221"/>
+ <source>Blue</source>
+ <translation>Azul</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="222"/>
+ <source>Yellow</source>
+ <translation>Amarillo</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="223"/>
+ <source>Rainbow</source>
+ <translation>Arcoíris</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="224"/>
+ <source>Pink</source>
+ <translation>Rosado</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="225"/>
+ <source>Cyan</source>
+ <translation>Cian</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="248"/>
+ <source>% offset</source>
+ <translation>% desplazamiento</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="566"/>
+ <source>Music</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="568"/>
+ <source>Sfx</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="570"/>
+ <source>Blips</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="573"/>
+ <source>Log limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="596"/>
+ <source>Change character</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="599"/>
+ <source>Reload theme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="602"/>
+ <source>Call mod</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="605"/>
+ <source>Settings</source>
+ <translation>Ajustes</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="611"/>
+ <source>A/M</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="614"/>
+ <source>Preanim</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="692"/>
+ <source>Back to Lobby</source>
+ <translation>Volver al lobby</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2681"/>
+ <source>You were granted the Guard button.</source>
+ <translation>Te ha sido otorgado el botón Guardia.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2688"/>
+ <source>This does nothing, but there you go.</source>
+ <translation>Esto no hace nada, pero ahí lo tienes.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2695"/>
+ <source>You opened the settings menu.</source>
+ <translation>Abriste el menú de configuración.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2710"/>
+ <source>You will now pair up with </source>
+ <translation>Ahora te emparejarás con </translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2712"/>
+ <source> if they also choose your character in return.</source>
+ <translation> si ellos también eligen a tu personaje a cambio.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2718"/>
+ <source>You are no longer paired with anyone.</source>
+ <translation>Ya no estás emparejado con nadie.</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>¿Estás seguro de que lo escribiste bien? El ID de personaje no pudo ser reconocido.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2739"/>
+ <source>You have set your offset to </source>
+ <translation>Ha configurado su desplazamiento en </translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2746"/>
+ <source>Your offset must be between -100% and 100%!</source>
+ <translation>¡Su desplazamiento debe estar entre -100% y 100%!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2751"/>
+ <source>That offset does not look like one.</source>
+ <translation>Ese desplazamiento no se parece a uno.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2757"/>
+ <source>You switched your music and area list.</source>
+ <translation>Cambiaste tu lista de música y área.</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>Ha habilitado forzosamente funciones que el servidor puede no admitir. Es posible que no pueda hablar IC, o peor, debido a esto.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2775"/>
+ <source>Your pre-animations interrupt again.</source>
+ <translation>Sus pre-animaciones interrumpen de nuevo.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2777"/>
+ <source>Your pre-animations will not interrupt text.</source>
+ <translation>Sus pre-animaciones no interrumpirán el texto.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2788"/>
+ <source>Couldn&apos;t open chatlog.txt to write into.</source>
+ <translation>No se pudo abrir chatlog.txt para escribir.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2801"/>
+ <source>The IC chatlog has been saved.</source>
+ <translation>El chat IC se ha guardado.</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>¡No tienes una carpeta `base/cases /`! Ha sido creada para ti. Pero debido a que no existia la carpeta, tampoco habían casos guardados ahí.</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: %1</source>
+ <translation>¡Debe dar un nombre de archivo para cargar (no se necesita extensión)! Asegúrese de que esté en la carpeta `base/cases/` y de que tenga el formato correcto.
+Casos que puede cargar: %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2845"/>
+ <source>Case made by %1.</source>
+ <translation>Caso hecho por %1.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2851"/>
+ <source>Navigate to %1 for the CM doc.</source>
+ <translation>Navegue a %1 para el documento del CM.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2870"/>
+ <source>Your case &quot;%1&quot; was loaded!</source>
+ <translation>Su caso &quot;%1&quot; fue cargado!</translation>
+ </message>
+ <message>
+ <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="obsolete">¡Debe dar un nombre de archivo para cargar (no se necesita extensión)! Asegúrese de que esté en la carpeta `base/cases/` y de que tenga el formato correcto.
+Casos que puede cargar: </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>¡Demasiados argumentos para cargar un caso! Solo necesita un nombre de archivo, sin extensión.</translation>
+ </message>
+ <message>
+ <source>Case made by </source>
+ <translation type="obsolete">Caso hecho por </translation>
+ </message>
+ <message>
+ <source>Navigate to </source>
+ <translation type="obsolete">Navegue a </translation>
+ </message>
+ <message>
+ <source> for the CM doc.</source>
+ <translation type="obsolete"> para el documento de CM.</translation>
+ </message>
+ <message>
+ <source>Your case &quot;</source>
+ <translation type="obsolete">Su caso &quot;</translation>
+ </message>
+ <message>
+ <source>&quot; was loaded!</source>
+ <translation type="obsolete">&quot; fue cargado!</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>¡No tienes una carpeta `base/cases /`! Fue creada para ti.</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>¡Debe dar un nombre de archivo para guardar (no se necesita la extensión) y el estado de la sala del tribunal!</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>
+ <translatorcomment>why two exclamations, seems excesive.</translatorcomment>
+ <translation>¡Demasiados argumentos para salvar un caso! Solo necesita un nombre de archivo sin extensión y el estado de la sala del tribunal.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2923"/>
+ <source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
+ <translation>¡Guardado con éxito, puede editar el doc y doc link en el archivo ini!</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="583"/>
+ <location filename="../../src/courtroom.cpp" line="2959"/>
+ <source>Server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3422"/>
+ <source>Reason:</source>
+ <translation>Razón:</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3423"/>
+ <source>Call Moderator</source>
+ <translation>Llamar Moderador</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3431"/>
+ <location filename="../../src/courtroom.cpp" line="3434"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3431"/>
+ <source>You must provide a reason.</source>
+ <translation>Debes proporcionar una razón.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3434"/>
+ <source>The message is too long.</source>
+ <translation>El mensaje es muy largo.</translation>
+ </message>
+ <message>
+ <location filename="../../src/evidence.cpp" line="25"/>
+ <source>Choose...</source>
+ <translation>Elegir...</translation>
+ </message>
+ <message>
+ <location filename="../../src/evidence.cpp" line="194"/>
+ <source>Images (*.png)</source>
+ <translation>Imágenes (* .png)</translation>
+ </message>
+ <message>
+ <location filename="../../src/evidence.cpp" line="268"/>
+ <source>Add new evidence...</source>
+ <translation>Añadir nueva evidencia...</translation>
+ </message>
+</context>
+<context>
+ <name>Lobby</name>
+ <message>
+ <location filename="../../src/lobby.cpp" line="12"/>
+ <source>Attorney Online 2</source>
+ <translation>Attorney Online 2</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="29"/>
+ <source>Name</source>
+ <translation>Nombre</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>No parece que su cliente esté configurado correctamente.
+¿Descargó todos los recursos correctamente desde tiny.cc/getao, incluida la gran carpeta &apos;base&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="104"/>
+ <source>Version: %1</source>
+ <translation>Versión: %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="147"/>
+ <source>Loading</source>
+ <translation>Cargando</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="151"/>
+ <source>Cancel</source>
+ <translation>Cancelar</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;El simulador de drama de la sala del tribunal&lt;p&gt;&lt;b&gt;Código fuente:&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;Desarrollo mayor:&lt;/b&gt; &lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Agradecimiento especial:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (diseño de interfaz de usuario), Draxirch (diseño de interfaz de usuario), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="376"/>
+ <source>Online: %1/%2</source>
+ <translation>En línea: %1/%2</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="114"/>
+ <location filename="../../src/lobby.cpp" line="316"/>
+ <source>Offline</source>
+ <translation>Fuera de línea</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">Error</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_jp.qm b/resource/translations/ao_jp.qm
new file mode 100644
index 00000000..e4fb562a
--- /dev/null
+++ b/resource/translations/ao_jp.qm
Binary files differ
diff --git a/resource/translations/ao_jp.ts b/resource/translations/ao_jp.ts
new file mode 100644
index 00000000..4f8153a6
--- /dev/null
+++ b/resource/translations/ao_jp.ts
@@ -0,0 +1,849 @@
+<?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="163"/>
+ <source>Error connecting to master server. Will try again in %1 seconds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aoapplication.cpp" line="167"/>
+ <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: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="651"/>
+ <source>You have been banned from the server.
+Reason: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="659"/>
+ <source>You are banned on this server.
+Reason: %1</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="171"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <source>Sets the language if you don&apos;t want to use your system language.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="186"/>
+ <source>Callwords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="211"/>
+ <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="217"/>
+ <source>Audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="228"/>
+ <source>Audio device:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="229"/>
+ <source>Sets the audio device for all sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="263"/>
+ <source>Music:</source>
+ <translation>音楽:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <source>Sets the music&apos;s default volume.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="276"/>
+ <source>SFX:</source>
+ <translation>効果音:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <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="290"/>
+ <source>Blips:</source>
+ <translation>ブリップ:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <source>Sets the volume of the blips, the talking sound effects.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="309"/>
+ <source>Blip rate:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="310"/>
+ <source>Sets the delay between playing the blip sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="321"/>
+ <source>Blank blips:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <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="334"/>
+ <source>Casing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
+ <source>This server supports case alerts.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="350"/>
+ <source>This server does not support case alerts.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="351"/>
+ <source>Pretty self-explanatory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="358"/>
+ <source>Casing:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="359"/>
+ <source>If checked, you will get alerts about case announcements.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="372"/>
+ <source>Defense:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="373"/>
+ <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="386"/>
+ <source>Prosecution:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="387"/>
+ <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="400"/>
+ <source>Judge:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="401"/>
+ <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="414"/>
+ <source>Juror:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="415"/>
+ <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="428"/>
+ <source>Stenographer:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="429"/>
+ <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="442"/>
+ <source>CM:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="443"/>
+ <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="456"/>
+ <source>Hosting cases:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="457"/>
+ <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:
+%1/%2</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"/>
+ <location filename="../../src/courtroom.cpp" line="608"/>
+ <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="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: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2845"/>
+ <source>Case made by %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2851"/>
+ <source>Navigate to %1 for the CM doc.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2870"/>
+ <source>Your case &quot;%1&quot; was loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="583"/>
+ <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="248"/>
+ <source>% offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="566"/>
+ <source>Music</source>
+ <translation>音楽</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="568"/>
+ <source>Sfx</source>
+ <translation>効果音</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="570"/>
+ <source>Blips</source>
+ <translation>ブリップ</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="573"/>
+ <source>Log limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="596"/>
+ <source>Change character</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="599"/>
+ <source>Reload theme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="602"/>
+ <source>Call mod</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="605"/>
+ <source>Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="611"/>
+ <source>A/M</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="614"/>
+ <source>Preanim</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="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="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>エラー</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>
+ <source>Objection!</source>
+ <translation type="vanished">意義あり!</translation>
+ </message>
+ <message>
+ <source>In Lobby</source>
+ <translation type="vanished">ロビーでいる</translation>
+ </message>
+ <message>
+ <source>Idle</source>
+ <translation type="vanished">落ちている</translation>
+ </message>
+ <message>
+ <source>In a Server</source>
+ <translation type="vanished">サーバーでいます</translation>
+ </message>
+ <message>
+ <source>Spectating</source>
+ <translation type="vanished">観客している</translation>
+ </message>
+</context>
+<context>
+ <name>Lobby</name>
+ <message>
+ <location filename="../../src/lobby.cpp" line="12"/>
+ <source>Attorney Online 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="29"/>
+ <source>Name</source>
+ <translation type="unfinished">名前</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 type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="104"/>
+ <source>Version: %1</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="376"/>
+ <source>Online: %1/%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="114"/>
+ <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/resource/translations/ao_ru.qm b/resource/translations/ao_ru.qm
new file mode 100644
index 00000000..19bf0a95
--- /dev/null
+++ b/resource/translations/ao_ru.qm
Binary files differ
diff --git a/resource/translations/ao_ru.ts b/resource/translations/ao_ru.ts
new file mode 100644
index 00000000..9714c9d5
--- /dev/null
+++ b/resource/translations/ao_ru.ts
@@ -0,0 +1,855 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ru_RU">
+<context>
+ <name>AOApplication</name>
+ <message>
+ <location filename="../../src/aoapplication.cpp" line="138"/>
+ <source>Disconnected from server.</source>
+ <translation>Соединение с сервером прервано.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aoapplication.cpp" line="163"/>
+ <source>Error connecting to master server. Will try again in %1 seconds.</source>
+ <translation>Ошибка соединения с главным сервером. Попытка пересоединения будет через %1 с.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aoapplication.cpp" line="167"/>
+ <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>Произошла ошибка соединения с главным сервером.
+Пожалуйста, проверьте ваши Интернет-соединение, настройки браундмауэра, и попробуйте перезайти.</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>Устаревшая версия! У вас установлена %1
+Проследуйте на сайт aceattorneyonline.com для обновления.</translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="114"/>
+ <source>You have been exiled from AO.
+Have a nice day.</source>
+ <translation>Из AO вас отправили в жизнь.
+Хорошего дня.</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>Загрузка</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: %1</source>
+ <translation>Вас выпнули с сервера.
+Причина: %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="651"/>
+ <source>You have been banned from the server.
+Reason: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/packet_distribution.cpp" line="659"/>
+ <source>You are banned on this server.
+Reason: %1</source>
+ <translation>Вас отправили в баню.
+Причина: %1</translation>
+ </message>
+ <message>
+ <source>You have been kicked from the server.
+Reason: </source>
+ <translation type="vanished">Вас выпнули с сервера.
+Причина: </translation>
+ </message>
+ <message>
+ <source>You are banned on this server.
+Reason: </source>
+ <translation type="vanished">Вас отправили в баню.
+Причина: </translation>
+ </message>
+</context>
+<context>
+ <name>AOCaseAnnouncerDialog</name>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="9"/>
+ <source>Case Announcer</source>
+ <translation>Материалы дела</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="38"/>
+ <source>Case title:</source>
+ <translation>Название:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="48"/>
+ <source>Defense needed</source>
+ <translation>Сторона защиты</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="50"/>
+ <source>Prosecution needed</source>
+ <translation>Сторона обвинения</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="52"/>
+ <source>Judge needed</source>
+ <translation>Без судьи никак</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="54"/>
+ <source>Jurors needed</source>
+ <translation>Суд присяжных</translation>
+ </message>
+ <message>
+ <location filename="../../src/aocaseannouncerdialog.cpp" line="56"/>
+ <source>Stenographer needed</source>
+ <translation>Нужен стенографист?</translation>
+ </message>
+</context>
+<context>
+ <name>AOOptionsDialog</name>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="11"/>
+ <source>Settings</source>
+ <translation>Настройки</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="40"/>
+ <source>Gameplay</source>
+ <translation>Игра</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="51"/>
+ <source>Theme:</source>
+ <translation>Тема:</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>Устанавливает внешний вид игры. Может понадобиться перезайти на сервер.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="81"/>
+ <source>Log goes downwards:</source>
+ <translation>Портянку вниз:</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>Отметьте галочку, если хотите, чтобы сообщения в игровом чате отображались снизу, а не сверху.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="94"/>
+ <source>Log length:</source>
+ <translation>Длина игрового чата:</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>Количество сообщений, максимально хранимых в игровом чате. Значение, равное 0 или меньше, будет расценено как снятие такого ограничения.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="113"/>
+ <source>Default username:</source>
+ <translation>Никнейм по умолчанию:</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>Псевдоним, используемый при соединении с сервером. В основном, его видно в чате сервера.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="126"/>
+ <source>Custom shownames:</source>
+ <translation>Произвольные имена:</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>Отображать произвольные имена персонажей, установленные самими игроками.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="145"/>
+ <source>Backup MS:</source>
+ <translation>Запасной ГС:</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>Отображать перечень серверов от главного сервера, указанного здесь, когда не удалось соединиться с первичным ГС.</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>Показать в Discord сервер, на котором вы играете, каким персонажем управляете и время игры.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="171"/>
+ <source>Language:</source>
+ <translation>Язык:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="172"/>
+ <source>Sets the language if you don&apos;t want to use your system language.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="186"/>
+ <source>Callwords</source>
+ <translation>Позывные</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="211"/>
+ <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;Введите на отдельных строках свои позывные, при указании которых в сообщениях будет подан звуковой сигнал.&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="217"/>
+ <source>Audio</source>
+ <translation>Аудио</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="228"/>
+ <source>Audio device:</source>
+ <translation>Устройство воспроизведения:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="229"/>
+ <source>Sets the audio device for all sounds.</source>
+ <translation>Куда вещать звук из игры.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="263"/>
+ <source>Music:</source>
+ <translation>Музыка:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="264"/>
+ <source>Sets the music&apos;s default volume.</source>
+ <translation>Громкость музыки по умолчанию.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="276"/>
+ <source>SFX:</source>
+ <translation>Звук. эффекты:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="277"/>
+ <source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
+ <translation>Громкость звуковых эффектов по умолчанию.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="290"/>
+ <source>Blips:</source>
+ <translation>Сигналы:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="291"/>
+ <source>Sets the volume of the blips, the talking sound effects.</source>
+ <translation>Громкость сигналов, заменяющих голос, по умолчанию.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="309"/>
+ <source>Blip rate:</source>
+ <translation>Пер. сигналов:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="310"/>
+ <source>Sets the delay between playing the blip sounds.</source>
+ <translation>Период между сигналами, заменяющими голос, по умолчанию.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="321"/>
+ <source>Blank blips:</source>
+ <translation>Пустые сигналы:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
+ <translation>Проигрывать сигналы даже для пробелов.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="334"/>
+ <source>Casing</source>
+ <translation>Заседание</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="348"/>
+ <source>This server supports case alerts.</source>
+ <translation>Этот сервер поддерживает объявление заседания.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="350"/>
+ <source>This server does not support case alerts.</source>
+ <translation>Этот сервер не поддерживает объявление заседания.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="351"/>
+ <source>Pretty self-explanatory.</source>
+ <translation>Весьма доходчиво.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="358"/>
+ <source>Casing:</source>
+ <translation>Новое дело:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="359"/>
+ <source>If checked, you will get alerts about case announcements.</source>
+ <translation>При заведении дела вы получите уведомление.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="372"/>
+ <source>Defense:</source>
+ <translation>Защита:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="373"/>
+ <source>If checked, you will get alerts about case announcements if a defense spot is open.</source>
+ <translation>При заведении дела, в котором нужна сторона защиты, вы получите уведомление.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="386"/>
+ <source>Prosecution:</source>
+ <translation>Обвинение:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="387"/>
+ <source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source>
+ <translation>При заведении дела, в котором нужна сторона обвинения, вы получите уведомление.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="400"/>
+ <source>Judge:</source>
+ <translation>Судья:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="401"/>
+ <source>If checked, you will get alerts about case announcements if the judge spot is open.</source>
+ <translation>При заведении дела, в котором нужен судья, вы получите уведомление.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="414"/>
+ <source>Juror:</source>
+ <translation>Присяжный:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="415"/>
+ <source>If checked, you will get alerts about case announcements if a juror spot is open.</source>
+ <translation>При заведении дела, в котором нужны присяжные заседатели, вы получите уведомление.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="428"/>
+ <source>Stenographer:</source>
+ <translation>Стенографист:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="429"/>
+ <source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source>
+ <translation>При заведении дела, в котором нужна стенография, вы получите уведомление.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="442"/>
+ <source>CM:</source>
+ <translation>ПД:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="443"/>
+ <source>If checked, you will appear amongst the potential CMs on the server.</source>
+ <translation>Отметьте, если вы хотите состоять в числе производителей дел.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="456"/>
+ <source>Hosting cases:</source>
+ <translation>ПД акт.:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="457"/>
+ <source>If you&apos;re a CM, enter what cases you are willing to host.</source>
+ <translation>Будучи производителем дела (ПД), вы можете войти в зону и заниматься её оркестровкой.</translation>
+ </message>
+</context>
+<context>
+ <name>Courtroom</name>
+ <message>
+ <location filename="../../src/charselect.cpp" line="21"/>
+ <source>Password</source>
+ <translation>Пароль</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>Поиск</translation>
+ </message>
+ <message>
+ <location filename="../../src/charselect.cpp" line="35"/>
+ <source>Passworded</source>
+ <translation>Ограничен паролем</translation>
+ </message>
+ <message>
+ <location filename="../../src/charselect.cpp" line="39"/>
+ <source>Taken</source>
+ <translation>Занят</translation>
+ </message>
+ <message>
+ <location filename="../../src/charselect.cpp" line="217"/>
+ <source>Generating chars:
+%1/%2</source>
+ <translation>Генерация персонажей:
+%1/%2</translation>
+ </message>
+ <message>
+ <source>Generating chars:
+</source>
+ <translation type="vanished">Генерация персонажей:
+</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="116"/>
+ <source>Showname</source>
+ <translation>Имя</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="120"/>
+ <source>Message</source>
+ <translation>Сообщение</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"/>
+ <location filename="../../src/courtroom.cpp" line="608"/>
+ <source>Casing</source>
+ <translation>Дело</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="200"/>
+ <source>Shownames</source>
+ <translation>Произв. имена</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="203"/>
+ <source>No Interrupt</source>
+ <translation>Говорить сразу</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>В общем-то, это ни на что не влияет...</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: %1</source>
+ <translation>Укажите имя файла с делом (без расширения) для загрузки. Убедитесь, что оно расположено в папке `base/cases`.
+Были найдены: %1</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2845"/>
+ <source>Case made by %1.</source>
+ <translation>Дело завëл игрок: %1.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2851"/>
+ <source>Navigate to %1 for the CM doc.</source>
+ <translation>Перейдите к %1 для получения материалов дела.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2870"/>
+ <source>Your case &quot;%1&quot; was loaded!</source>
+ <translation>Дело под кодовым названием &quot;%1&quot; готово!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="583"/>
+ <location filename="../../src/courtroom.cpp" line="2959"/>
+ <source>Server</source>
+ <translation>Сервер</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>Розовый</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="225"/>
+ <source>Cyan</source>
+ <translation>Голубой</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="248"/>
+ <source>% offset</source>
+ <translation>% сдвига</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="566"/>
+ <source>Music</source>
+ <translation>Музыка</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="568"/>
+ <source>Sfx</source>
+ <translation>Звук. эффекты</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="570"/>
+ <source>Blips</source>
+ <translation>Сигналы</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="573"/>
+ <source>Log limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="596"/>
+ <source>Change character</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="599"/>
+ <source>Reload theme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="602"/>
+ <source>Call mod</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="605"/>
+ <source>Settings</source>
+ <translation>Настройки</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="611"/>
+ <source>A/M</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="614"/>
+ <source>Preanim</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2681"/>
+ <source>You were granted the Guard button.</source>
+ <translation>Теперь у вас есть кнопка &quot;Охрана&quot;.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2695"/>
+ <source>You opened the settings menu.</source>
+ <translation>Вы открыли меню настроек.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2710"/>
+ <source>You will now pair up with </source>
+ <translation>Вы встанете парой с персонажем по имени </translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2712"/>
+ <source> if they also choose your character in return.</source>
+ <translation> (если он выберет вас в ответ).</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2718"/>
+ <source>You are no longer paired with anyone.</source>
+ <translation>Теперь вы не стоите в парах.</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>Кажется, вам нужно поменять запрос: такой идентификатор персонажа не был найден.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2739"/>
+ <source>You have set your offset to </source>
+ <translation>Вы установили сдвиг персонажа на </translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2746"/>
+ <source>Your offset must be between -100% and 100%!</source>
+ <translation>Сдвиг персонажа должен быть между -100% и 100%!</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2751"/>
+ <source>That offset does not look like one.</source>
+ <translation>Неверный сдвиг персонажа.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2757"/>
+ <source>You switched your music and area list.</source>
+ <translation>Вы переключили перечень зон и музыки.</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>Из-за того, что вы включили не поддержимаемые сервером возможности, он может не принять ваши сообщения.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2775"/>
+ <source>Your pre-animations interrupt again.</source>
+ <translation>Персонаж будет говорить только после анимации.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2777"/>
+ <source>Your pre-animations will not interrupt text.</source>
+ <translation>Персонаж будет говорить и во время анимации.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2788"/>
+ <source>Couldn&apos;t open chatlog.txt to write into.</source>
+ <translation>Не могу открыть `chatlog.txt` для записи лога.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2801"/>
+ <source>The IC chatlog has been saved.</source>
+ <translation>Лог игрового чата сохранëн.</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>Файл с делом не найден. Если найдëте, положите его в папку `base/cases/`, которую мы для вас создали.</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>Введите имя файла без расширения.</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>Папка `base/cases/` отсутствует!</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>Введите имя файла (без расширения) и предоставьте статус зоны.</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>Убедитесь, что имя файла не содержит расширение.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="2923"/>
+ <source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
+ <translation>Сохранение прошло успешно!</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>Причина:</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>Ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3431"/>
+ <source>You must provide a reason.</source>
+ <translation>Укажите причину.</translation>
+ </message>
+ <message>
+ <location filename="../../src/courtroom.cpp" line="3434"/>
+ <source>The message is too long.</source>
+ <translation>Слишком длинный текст.</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>Lobby</name>
+ <message>
+ <location filename="../../src/lobby.cpp" line="12"/>
+ <source>Attorney Online 2</source>
+ <translation>Attorney Online 2</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="29"/>
+ <source>Name</source>
+ <translation>Никнейм</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>Не похоже, что ваш клиент установлен правильно.
+Скачали ли вы все ресурсы (tiny.cc/getao), включая огромную папку `base`?</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="104"/>
+ <source>Version: %1</source>
+ <translation>Версия: %1</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>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Симулятор судебной драмы&lt;p&gt;&lt;b&gt;Исходный код:&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;Основной разработкой занимались:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Особенная благодарность:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (дизайн интерфейса), Draxirch (дизайн интерфейса), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="376"/>
+ <source>Online: %1/%2</source>
+ <translation>Онлайн: %1/%2</translation>
+ </message>
+ <message>
+ <location filename="../../src/lobby.cpp" line="114"/>
+ <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>На заметку</translation>
+ </message>
+</context>
+</TS>
diff --git a/resources.qrc b/resources.qrc
index bc9f322e..b8f62d1a 100644
--- a/resources.qrc
+++ b/resources.qrc
@@ -2,5 +2,10 @@
<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_jp.qm</file>
+ <file>resource/translations/ao_es.qm</file>
+ <file>resource/translations/ao_ru.qm</file>
</qresource>
</RCC>
diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp
index 4ef1edd3..6213acd6 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();
}
@@ -160,16 +160,15 @@ void AOApplication::ms_connect_finished(bool connected, bool will_retry)
if (will_retry)
{
if (lobby_constructed)
- w_lobby->append_error("Error connecting to master server. Will try again in "
- + QString::number(net_manager->ms_reconnect_delay) + " seconds.");
+ w_lobby->append_error(tr("Error connecting to master server. Will try again in %1 seconds.").arg(QString::number(net_manager->ms_reconnect_delay)));
}
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/aooptionsdialog.cpp b/src/aooptionsdialog.cpp
index 4bfe9de2..b5cb46fe 100644
--- a/src/aooptionsdialog.cpp
+++ b/src/aooptionsdialog.cpp
@@ -167,6 +167,21 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_gameplay_form->setWidget(9, QFormLayout::FieldRole, ui_discord_cb);
+ ui_language_label = new QLabel(ui_form_layout_widget);
+ ui_language_label->setText(tr("Language:"));
+ ui_language_label->setToolTip(tr("Sets the language if you don't want to use your system language."));
+ ui_gameplay_form->setWidget(10, QFormLayout::LabelRole, ui_language_label);
+
+ ui_language_combobox = new QComboBox(ui_form_layout_widget);
+ ui_language_combobox->addItem(configini->value("language", " ").value<QString>() + " - Keep current setting");
+ ui_language_combobox->addItem(" - Default");
+ ui_language_combobox->addItem("en - English");
+ ui_language_combobox->addItem("de - Deutsch");
+ ui_language_combobox->addItem("es - Español");
+ ui_language_combobox->addItem("jp - 日本語");
+ ui_language_combobox->addItem("ru - Русский");
+ ui_gameplay_form->setWidget(10, QFormLayout::FieldRole, ui_language_combobox);
+
// Here we start the callwords tab.
ui_callwords_tab = new QWidget();
ui_settings_tabs->addTab(ui_callwords_tab, tr("Callwords"));
@@ -466,6 +481,7 @@ void AOOptionsDialog::save_pressed()
configini->setValue("show_custom_shownames", ui_showname_cb->isChecked());
configini->setValue("master", ui_ms_textbox->text());
configini->setValue("discord", ui_discord_cb->isChecked());
+ configini->setValue("language", ui_language_combobox->currentText().left(2));
QFile* callwordsini = new QFile(ao_app->get_base_path() + "callwords.ini");
diff --git a/src/charselect.cpp b/src/charselect.cpp
index 9d579a7b..0cfb7753 100644
--- a/src/charselect.cpp
+++ b/src/charselect.cpp
@@ -215,7 +215,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%1/%2").arg(QString::number(ao_app->generated_chars)).arg(QString::number(ao_app->char_list_size)));
}
}
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 7907b543..54b1b2df 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -245,7 +245,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_pair_list = new QListWidget(this);
ui_pair_offset_spinbox = new QSpinBox(this);
ui_pair_offset_spinbox->setRange(-100,100);
- ui_pair_offset_spinbox->setSuffix("% offset");
+ ui_pair_offset_spinbox->setSuffix(tr("% offset"));
ui_pair_button = new AOButton(this, ao_app);
ui_evidence_button = new AOButton(this, ao_app);
@@ -563,14 +563,14 @@ void Courtroom::set_widgets()
ui_prosecution_bar->set_image("prosecutionbar" + QString::number(prosecution_bar_state) + ".png");
set_size_and_pos(ui_music_label, "music_label");
- ui_music_label->setText("Music");
+ ui_music_label->setText(tr("Music"));
set_size_and_pos(ui_sfx_label, "sfx_label");
- ui_sfx_label->setText("Sfx");
+ ui_sfx_label->setText(tr("Sfx"));
set_size_and_pos(ui_blip_label, "blip_label");
- ui_blip_label->setText("Blips");
+ ui_blip_label->setText(tr("Blips"));
set_size_and_pos(ui_log_limit_label, "log_limit_label");
- ui_log_limit_label->setText("Log limit");
+ ui_log_limit_label->setText(tr("Log limit"));
set_size_and_pos(ui_hold_it, "hold_it");
ui_hold_it->set_image("holdit.png");
@@ -580,7 +580,7 @@ void Courtroom::set_widgets()
ui_take_that->set_image("takethat.png");
set_size_and_pos(ui_ooc_toggle, "ooc_toggle");
- ui_ooc_toggle->setText("Server");
+ ui_ooc_toggle->setText(tr("Server"));
set_size_and_pos(ui_witness_testimony, "witness_testimony");
ui_witness_testimony->set_image("witnesstestimony.png");
@@ -593,25 +593,25 @@ void Courtroom::set_widgets()
ui_not_guilty->set_image("notguilty.png");
set_size_and_pos(ui_change_character, "change_character");
- ui_change_character->setText("Change character");
+ ui_change_character->setText(tr("Change character"));
set_size_and_pos(ui_reload_theme, "reload_theme");
- ui_reload_theme->setText("Reload theme");
+ ui_reload_theme->setText(tr("Reload theme"));
set_size_and_pos(ui_call_mod, "call_mod");
- ui_call_mod->setText("Call mod");
+ ui_call_mod->setText(tr("Call mod"));
set_size_and_pos(ui_settings, "settings");
- ui_settings->setText("Settings");
+ ui_settings->setText(tr("Settings"));
set_size_and_pos(ui_announce_casing, "casing_button");
- ui_announce_casing->setText("Casing");
+ ui_announce_casing->setText(tr("Casing"));
set_size_and_pos(ui_switch_area_music, "switch_area_music");
- ui_switch_area_music->setText("A/M");
+ ui_switch_area_music->setText(tr("A/M"));
set_size_and_pos(ui_pre, "pre");
- ui_pre->setText("Preanim");
+ ui_pre->setText(tr("Preanim"));
set_size_and_pos(ui_pre_non_interrupt, "pre_no_interrupt");
set_size_and_pos(ui_flip, "flip");
@@ -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"))
@@ -2821,7 +2821,7 @@ void Courtroom::on_ooc_return_pressed()
if (command.size() < 2)
{
- append_server_chatmessage("CLIENT", tr("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.\nCases you can load: ") + caseslist.join(", "), "1");
+ append_server_chatmessage("CLIENT", tr("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.\nCases you can load: %1").arg(caseslist.join(", ")), "1");
ui_ooc_chat_message->clear();
return;
}
@@ -2842,13 +2842,13 @@ void Courtroom::on_ooc_return_pressed()
QString casestatus = casefile.value("status", "").value<QString>();
if (!caseauth.isEmpty())
- append_server_chatmessage("CLIENT", tr("Case made by ") + caseauth + ".", "1");
+ append_server_chatmessage("CLIENT", tr("Case made by %1.").arg(caseauth), "1");
if (!casedoc.isEmpty())
ao_app->send_server_packet(new AOPacket("CT#" + ui_ooc_chat_name->text() + "#/doc " + casedoc + "#%"));
if (!casestatus.isEmpty())
ao_app->send_server_packet(new AOPacket("CT#" + ui_ooc_chat_name->text() + "#/status " + casestatus + "#%"));
if (!cmdoc.isEmpty())
- append_server_chatmessage("CLIENT", tr("Navigate to ") + cmdoc + tr(" for the CM doc."), "1");
+ append_server_chatmessage("CLIENT", tr("Navigate to %1 for the CM doc.").arg(cmdoc), "1");
for (int i = local_evidence_list.size() - 1; i >= 0; i--) {
ao_app->send_server_packet(new AOPacket("DE#" + QString::number(i) + "#%"));
@@ -2867,7 +2867,7 @@ void Courtroom::on_ooc_return_pressed()
ao_app->send_server_packet(new AOPacket("PE", f_contents));
}
- append_server_chatmessage("CLIENT", tr("Your case \"") + command[1] + tr("\" was loaded!"), "1");
+ append_server_chatmessage("CLIENT", tr("Your case \"%1\" was loaded!").arg(command[1]), "1");
ui_ooc_chat_message->clear();
return;
}
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..c95fd49c 100644
--- a/src/lobby.cpp
+++ b/src/lobby.cpp
@@ -9,7 +9,7 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
{
ao_app = p_ao_app;
- this->setWindowTitle("Attorney Online 2");
+ this->setWindowTitle(tr("Attorney Online 2"));
this->setWindowIcon(QIcon(":/logo.png"));
ui_background = new AOImage(this, ao_app);
@@ -26,7 +26,7 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
ui_chatbox = new AOTextArea(this);
ui_chatbox->setOpenExternalLinks(true);
ui_chatname = new QLineEdit(this);
- ui_chatname->setPlaceholderText("Name");
+ ui_chatname->setPlaceholderText(tr("Name"));
ui_chatname->setText(ao_app->get_ooc_name());
ui_chatmessage = new QLineEdit(this);
ui_loading_background = new AOImage(this, ao_app);
@@ -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);
}
@@ -101,7 +101,7 @@ void Lobby::set_widgets()
ui_connect->set_image("connect.png");
set_size_and_pos(ui_version, "version");
- ui_version->setText("Version: " + ao_app->get_version_string());
+ ui_version->setText(tr("Version: %1").arg(ao_app->get_version_string()));
set_size_and_pos(ui_about, "about");
ui_about->set_image("about.png");
@@ -111,7 +111,7 @@ void Lobby::set_widgets()
"font: bold;");
set_size_and_pos(ui_player_count, "player_count");
- ui_player_count->setText("Offline");
+ ui_player_count->setText(tr("Offline"));
ui_player_count->setStyleSheet("font: bold;"
"color: white;"
"qproperty-alignment: AlignCenter;");
@@ -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);
@@ -373,7 +373,7 @@ void Lobby::append_error(QString f_message)
void Lobby::set_player_count(int players_online, int max_players)
{
- QString f_string = "Online: " + QString::number(players_online) + "/" + QString::number(max_players);
+ QString f_string = tr("Online: %1/%2").arg(QString::number(players_online)).arg(QString::number(max_players));
ui_player_count->setText(f_string);
}
diff --git a/src/main.cpp b/src/main.cpp
index 80ea93bb..6c7b1513 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,4 +1,3 @@
-
#include "aoapplication.h"
#include "datatypes.h"
@@ -7,6 +6,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 +19,23 @@ int main(int argc, char *argv[])
#endif
AOApplication main_app(argc, argv);
+
+ QSettings *configini = main_app.configini;
+
+ QString p_language = configini->value("language", QLocale::system().name()).toString();
+ if (p_language == " " || p_language == "")
+ p_language = QLocale::system().name();
+
+ QTranslator qtTranslator;
+ qtTranslator.load("qt_" + p_language,
+ QLibraryInfo::location(QLibraryInfo::TranslationsPath));
+ main_app.installTranslator(&qtTranslator);
+
+ QTranslator appTranslator;
+ qDebug() << ":/resource/translations/ao_" + p_language;
+ appTranslator.load("ao_" + p_language, ":/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..b79ec309 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: %1").arg(f_contents.at(0)));
construct_lobby();
destruct_courtroom();
}
@@ -647,7 +648,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
{
if (courtroom_constructed && f_contents.size() >= 1)
{
- call_notice("You have been banned from the server.\nReason: " + f_contents.at(0));
+ call_notice(tr("You have been banned from the server.\nReason: %1").arg(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: %1").arg(f_contents.at(0)));
}
else if (header == "ZZ")
{