diff --git a/Attorney_Online.pro b/Attorney_Online.pro index aefd514..32781a1 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 a65e3f5..83b84cb 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 e7ecc6e..4115b51 100644 --- a/include/discord_rich_presence.h +++ b/include/discord_rich_presence.h @@ -5,6 +5,8 @@ #include #include #include +#include + #include #include @@ -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 0000000..6fd250d Binary files /dev/null and b/resource/translations/ao_de.qm differ diff --git a/resource/translations/ao_de.ts b/resource/translations/ao_de.ts new file mode 100644 index 0000000..1c0675b --- /dev/null +++ b/resource/translations/ao_de.ts @@ -0,0 +1,982 @@ + + + + + AOApplication + + + Disconnected from server. + Vom Server getrennt. + + + + Error connecting to master server. Will try again in %1 seconds. + Fehler bei der Verbindung zum Master Server. Erneuter Versuch in %1 Sekunden. + + + Error connecting to master server. Will try again in %n seconds. + Fehler bei der Verbindung zum Master Server. Erneuter Versuch in %n Sekunden. + + + + 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. + 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. + + + + Outdated version! Your version: %1 +Please go to aceattorneyonline.com to update. + Version zu alt! Deine Version: %1 +Bitte besuche aceattorneyonline.com für ein Update. + + + + You have been exiled from AO. +Have a nice day. + Du wurdest von AO befreit. +Schönen Urlaub. + + + + Attorney Online 2 + Attorney Online 2 + + + + Loading + Laden + + + + Loading evidence: +%1/%2 + Lade Beweisstücke: +%1/%2 + + + + + Loading music: +%1/%2 + Lade Musik: +%1/%2 + + + + Loading chars: +%1/%2 + Lade Charaktere: +%1/%2 + + + + You have been kicked from the server. +Reason: %1 + Du wurdest von diesem Server geschmissen. +Grund: %1 + + + + You have been banned from the server. +Reason: %1 + Du wurdest von diesem Server verbannt. +Grund: %1 + + + + You are banned on this server. +Reason: %1 + Du bist von diesem Server verbannt. +Grund: %1 + + + You have been kicked from the server. +Reason: + Du wurdest von diesem Server geschmissen. +Grund: + + + You are banned on this server. +Reason: + Du wurdest von diesem Server verbannt. +Grund: + + + You have been kicked. + Du wurdest rausgeschmissen. + + + You are banned on this server. + Du wurdest verbannt. + + + + AOCaseAnnouncerDialog + + + Case Announcer + Fallansager + + + + Case title: + Fallname: + + + + Defense needed + Verteidiger benötigt + + + + Prosecution needed + Kläger benötigt + + + + Judge needed + Richter benötigt + + + + Jurors needed + Jury benötigt + + + + Stenographer needed + Stenograph benötigt + + + + AOOptionsDialog + + + Settings + Einstellungen + + + + Gameplay + Spiel + + + + Theme: + Theme: + + + + Sets the theme used in-game. If the new theme changes the lobby's look as well, you'll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it. + Setzt das Theme. Wenn das neue Theme auch das Aussehen der Lobby verändert, must du diese neu laden um die Änderungen zu sehen. + + + + Log goes downwards: + Verlauf geht nach unten: + + + + If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked. + Wenn angehakt werden neue Nachrichten unten erscheinen (wie beim OOC). Das traditionelle (AO1) Verhalten wäre nicht angehakt. + + + + Log length: + Länge: + + + + The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as 'infinite'. + Die Menge an Nachrichten die aufgehoben werden bevor alte gelöscht werden. 0 bedeutet unendlich. + + + + Default username: + Standard Benutzername: + + + + Your OOC name will be automatically set to this value when you join a server. + Dein OOC Name wird automatisch auf dies gesetzt. + + + + Custom shownames: + Eigener Anzeigename: + + + + Gives the default value for the in-game 'Custom shownames' tickbox, which in turn determines whether the client should display custom in-character names. + Standardwert für die Anzeigename Box, welche den In-Charakter Namen bestimmt. + + + + Backup MS: + Rückfall MS: + + + + If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address. + Wenn dereingebaute Master Server fehlschlägt, wird das Spiel diesen hier verwenden. + + + + Discord: + Discord: + + + + Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for. + Erlaubt anderen auf Discord zu sehen auf welchem Server du spielst, welchen Charakter du spielst und wie lange. + + + + Language: + Sprache: + + + + Sets the language if you don't want to use your system language. + Setzte die Sprache falls du nicht die Systemsprache verwenden möchtest. + + + + Callwords + Alarmwörter + + + + <html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html> + <html><head/><body>Gib so viele Alarmwörter ein wie du möchtest. Groß/Kleinschreibung ist egal. Für jede Wort nur eine Zeile!<br>Bitte keine leere Zeile am Ende -- du bekommst sonst bei jeder Nachricht einen Alarm.</body></html> + + + + Audio + Audio + + + + Audio device: + Audiogerät: + + + + Sets the audio device for all sounds. + Setzt das Audiogerät für all Geräusche. + + + + Music: + Musik: + + + + Sets the music's default volume. + Setzt die Musiklautstärke. + + + + SFX: + SFX: + + + + Sets the SFX's default volume. Interjections and actual sound effects count as 'SFX'. + Setzt die Lautstärke der Soundeffekte wie Einsprüche und die Geräusche der Charaktere. + + + + Blips: + Blips: + + + + Sets the volume of the blips, the talking sound effects. + Setzt die Lautstärke der Blips, das ist das Geräusch das die Charaktere beim Reden machen. + + + + Blip rate: + Bliprate: + + + + Sets the delay between playing the blip sounds. + Setzt die Pause zwischen einzelnen Blips. + + + + Blank blips: + Leere Blips: + + + + If true, the game will play a blip sound even when a space is 'being said'. + Wenn angehakt wird das Spiel auch bei einem Leerzeichen einen Blip machen. + + + + Casing + Fälle + + + + This server supports case alerts. + Dieser Server unterstützt Fallalarme. + + + + This server does not support case alerts. + Dieser Server unterstützt Fallalarme nicht. + + + + Pretty self-explanatory. + Eigentlich selbsterklärend. + + + + Casing: + Fälle: + + + + If checked, you will get alerts about case announcements. + Wenn angehakt wirst du benachrichtigt wenn ein Fall angekündigt wird. + + + + Defense: + Verteidigung: + + + + If checked, you will get alerts about case announcements if a defense spot is open. + Wenn angehakt wirst du benachrichtigt wenn ein Verteidiger benötigt wird. + + + + Prosecution: + Kläger: + + + + If checked, you will get alerts about case announcements if a prosecutor spot is open. + Wenn angehakt wirst du benachrichtigt wenn ein Kläger benötigt wird. + + + + Judge: + Richter: + + + + If checked, you will get alerts about case announcements if the judge spot is open. + Wenn angehakt wirst du benachrichtigt wenn ein Richter benötigt wird. + + + + Juror: + Jury: + + + + If checked, you will get alerts about case announcements if a juror spot is open. + Wenn angehakt wirst du benachrichtigt wenn eine Jury benötigt wird. + + + + Stenographer: + Stenograph: + + + + If checked, you will get alerts about case announcements if a stenographer spot is open. + Wenn angehakt wirst du benachrichtigt wenn ein Stenograph benötigt wird. + + + + CM: + CM: + + + + If checked, you will appear amongst the potential CMs on the server. + Wenn angehakt wirst du als potentielle CM angezeigt. + + + + Hosting cases: + Fallleitung: + + + + If you're a CM, enter what cases you are willing to host. + Wenn du CM bist, gib ein welche Fälle du spielen möchtest. + + + + Courtroom + + + Password + Passwort + + + + Spectator + Zuschauer + + + + + Search + Suche + + + + Passworded + Gesperrt + + + + Taken + Benutzt + + + + Generating chars: +%1/%2 + Generiere Charaktere: +%1/%2 + + + Generating chars: + + Generiere Charaktere: + + + + Could not find %1 + Konnte %1 nicht finden. + + + + Showname + Anzeigename + + + + Message + Nachricht + + + + Name + Name + + + + Pre + Vor + + + + Flip + Spiegeln + + + + Guard + Wache + + + + + Casing + Fall + + + + Shownames + Anzeigenamen + + + + No Interrupt + Keine Unterbrechung + + + + White + Weiß + + + + Green + Grün + + + + Red + Rot + + + + Orange + Orange + + + + Blue + Blau + + + + Yellow + Gelb + + + + Music + Musik + + + + Sfx + Sfx + + + + Blips + Blips + + + + Log limit + Verlaufsgrenze + + + + + Server + Server + + + + Change character + Charakter ändern + + + + Reload theme + Aussehen neu laden + + + + Call mod + Moderator rufen + + + + Settings + Einstellungen + + + + A/M + A/M + + + + Preanim + Voranimation + + + + Back to Lobby + Zurück zur Lobby + + + You have been banned. + Du wurdest verbannt. + + + %1 has played a song: %2 + %1 hat ein Lied gespielt: %2 + + + + Rainbow + Regenbogen + + + + Pink + Pink + + + + Cyan + Cyan + + + + % offset + % Abstand + + + + You were granted the Guard button. + Dir wurde der Wache Knopf gegeben. + + + This does nohing, but there you go. + Dies bewirkt nichts, aber egal. + + + + This does nothing, but there you go. + Dies bewirkt nichts, aber egal. + + + + You opened the settings menu. + Du hast die Einstellungen geöffnet. + + + + You will now pair up with + Du wirst nun mit + + + + if they also choose your character in return. + gepaart, wenn der andere dies auch tut. + + + + You are no longer paired with anyone. + Du bist nicht mehr gepaart. + + + + Are you sure you typed that well? The char ID could not be recognised. + Hast du dich vertippt? Die ID konnte nicht erkannt werden. + + + + You have set your offset to + Dein Abstand ist auf + + + + Your offset must be between -100% and 100%! + Der Abstand muss zwischen -100% und 100% liegen! + + + + That offset does not look like one. + Das sieht nicht wie ein Abstand aus. + + + + You switched your music and area list. + Du hast zwischen Musik- und Gebitsliste umgeschaltet. + + + + You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this. + Du hast Funktionen erzwungen die der Server eventuell nicht unterstützt. Möglicherweise wirst du nicht mehr sprechen können. + + + + Your pre-animations interrupt again. + Deine Voranimation unterbrechen nun Text. + + + + Your pre-animations will not interrupt text. + Deine Voranimation unterbrechen Text nicht. + + + + Couldn't open chatlog.txt to write into. + Konnte chatlog.txt nicht öffnen. + + + + The IC chatlog has been saved. + Der IC Verlauf wurde gespeichert. + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely the case file you're looking for can't be found in there. + Du hattest keinen 'base/cases' Ordner! Ich hab ihn nun angelegt aber bedenke das er leer sein wird. + + + + 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 + Du musst einen Dateinamen angeben (ohne .ini). Stelle sicher das er im 'base/cases' Ordner ist und das er korrekt formatiert ist. +Verfügbare Fälle: %1 + + + + Case made by %1. + Fall von %1. + + + + Navigate to %1 for the CM doc. + Gehe zu %1 für das CM Dokument. + + + + Your case "%1" was loaded! + Dein Fall "%1" wurde geladen! + + + 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: + Du musst einen Dateinamen angeben (ohne .ini). Stelle sicher das er im 'base/cases' Ordner ist und das er korrekt formatiert ist. +Verfügbare Fälle: + + + + Too many arguments to load a case! You only need one filename, without extension. + Zu viele Argumente! Du brauchst nur den Dateinamen, ohne Erweiterung. + + + Case made by + Fall von + + + Navigate to + Gehe zu + + + for the CM doc. + für das CM Dokument. + + + Your case " + Dein Fall " + + + " was loaded! + " wurde geladen! + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely that you somehow deleted it. + Du hattest keinen 'base/cases' Ordner! Ich hab ihn nun angelegt aber bedenke das er leer sein wird. + + + + You need to give a filename to save (extension not needed) and the courtroom status! + Du musst einen Dateinamen (ohne Erweiterung) angebenn, sowie den Gebietsstatus! + + + + Too many arguments to save a case! You only need a filename without extension and the courtroom status! + Zu viele Argumente! Du brauchst nur den Dateinamen, ohne Erweiterung sowie den Gebietsstatus! + + + + Succesfully saved, edit doc and cmdoc link on the ini! + Erfolgreich gespeichert! + + + + Master + Master + + + + Reason: + Grund: + + + + Call Moderator + Moderator rufen + + + + + Error + Fehler + + + + You must provide a reason. + Du musst einen Grund angeben. + + + + The message is too long. + Die Nachricht ist zu lang. + + + Choose.. + Wähle.. + + + + Choose... + Wähle... + + + + Images (*.png) + Bilder (*.png) + + + + Add new evidence... + Neues Beweisstück... + + + + Discord + + Objection! + Einspruch! + + + In Lobby + In Lobby + + + Idle + Untätig + + + In a Server + In einem Server + + + Playing as %1 + Spielt als %1 + + + Spectating + Zuschauend + + + + Lobby + + + Attorney Online 2 + Attorney Online 2 + + + + Name + Name + + + + It doesn't look like your client is set up correctly. +Did you download all resources correctly from tiny.cc/getao, including the large 'base' folder? + Dein Client ist nicht korrekt eingerichtet. +Hast du ALLES von tiny.cc/getao heruntergeladen und entpackt, auch den großen 'base' Ordner? + + + + Version: %1 + Version: %1 + + + + Loading + Laden + + + + Cancel + Abbrechen + + + + <h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Special thanks:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy + <h2>Attorney Online %1</h2>Der Gerichtsdrama Simulator<p><b>Quelltext:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Leitende Entwicklung:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Danksagungen:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy + + + + Online: %1/%2 + Online: %1/%2 + + + 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 + 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 + + + + + Offline + Offline + + + + debug_functions + + + Error: %1 + Fehler: %1 + + + + Error + Fehler + + + + Notice + Hinweis + + + diff --git a/resource/translations/ao_en.qm b/resource/translations/ao_en.qm new file mode 100644 index 0000000..9dad8df Binary files /dev/null and b/resource/translations/ao_en.qm differ diff --git a/resource/translations/ao_en.ts b/resource/translations/ao_en.ts new file mode 100644 index 0000000..b917a41 --- /dev/null +++ b/resource/translations/ao_en.ts @@ -0,0 +1,826 @@ + + + + + AOApplication + + + Disconnected from server. + + + + + Error connecting to master server. Will try again in %1 seconds. + + + + + 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. + + + + + Outdated version! Your version: %1 +Please go to aceattorneyonline.com to update. + + + + + You have been exiled from AO. +Have a nice day. + + + + + Attorney Online 2 + + + + + Loading + + + + + Loading evidence: +%1/%2 + + + + + + Loading music: +%1/%2 + + + + + Loading chars: +%1/%2 + + + + + You have been kicked from the server. +Reason: %1 + + + + + You have been banned from the server. +Reason: %1 + + + + + You are banned on this server. +Reason: %1 + + + + + AOCaseAnnouncerDialog + + + Case Announcer + + + + + Case title: + + + + + Defense needed + + + + + Prosecution needed + + + + + Judge needed + + + + + Jurors needed + + + + + Stenographer needed + + + + + AOOptionsDialog + + + Settings + + + + + Gameplay + + + + + Theme: + + + + + Sets the theme used in-game. If the new theme changes the lobby's look as well, you'll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it. + + + + + Log goes downwards: + + + + + If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked. + + + + + Log length: + + + + + The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as 'infinite'. + + + + + Default username: + + + + + Your OOC name will be automatically set to this value when you join a server. + + + + + Custom shownames: + + + + + Gives the default value for the in-game 'Custom shownames' tickbox, which in turn determines whether the client should display custom in-character names. + + + + + Backup MS: + + + + + If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address. + + + + + Discord: + + + + + Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for. + + + + + Language: + + + + + Sets the language if you don't want to use your system language. + + + + + Callwords + + + + + <html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html> + + + + + Audio + + + + + Audio device: + + + + + Sets the audio device for all sounds. + + + + + Music: + + + + + Sets the music's default volume. + + + + + SFX: + + + + + Sets the SFX's default volume. Interjections and actual sound effects count as 'SFX'. + + + + + Blips: + + + + + Sets the volume of the blips, the talking sound effects. + + + + + Blip rate: + + + + + Sets the delay between playing the blip sounds. + + + + + Blank blips: + + + + + If true, the game will play a blip sound even when a space is 'being said'. + + + + + Casing + + + + + This server supports case alerts. + + + + + This server does not support case alerts. + + + + + Pretty self-explanatory. + + + + + Casing: + + + + + If checked, you will get alerts about case announcements. + + + + + Defense: + + + + + If checked, you will get alerts about case announcements if a defense spot is open. + + + + + Prosecution: + + + + + If checked, you will get alerts about case announcements if a prosecutor spot is open. + + + + + Judge: + + + + + If checked, you will get alerts about case announcements if the judge spot is open. + + + + + Juror: + + + + + If checked, you will get alerts about case announcements if a juror spot is open. + + + + + Stenographer: + + + + + If checked, you will get alerts about case announcements if a stenographer spot is open. + + + + + CM: + + + + + If checked, you will appear amongst the potential CMs on the server. + + + + + Hosting cases: + + + + + If you're a CM, enter what cases you are willing to host. + + + + + Courtroom + + + Password + + + + + Spectator + + + + + + Search + + + + + Passworded + + + + + Taken + + + + + Generating chars: +%1/%2 + + + + + Showname + + + + + Message + + + + + Name + + + + + Pre + + + + + Flip + + + + + Guard + + + + + + Casing + + + + + Shownames + + + + + No Interrupt + + + + + White + + + + + Green + + + + + Red + + + + + Orange + + + + + Blue + + + + + Yellow + + + + + This does nothing, but there you go. + + + + + 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 + + + + + Case made by %1. + + + + + Navigate to %1 for the CM doc. + + + + + Your case "%1" was loaded! + + + + + + Server + + + + + Back to Lobby + + + + + Rainbow + + + + + Pink + + + + + Cyan + + + + + % offset + + + + + Music + + + + + Sfx + + + + + Blips + + + + + Log limit + + + + + Change character + + + + + Reload theme + + + + + Call mod + + + + + Settings + + + + + A/M + + + + + Preanim + + + + + You were granted the Guard button. + + + + + You opened the settings menu. + + + + + You will now pair up with + + + + + if they also choose your character in return. + + + + + You are no longer paired with anyone. + + + + + Are you sure you typed that well? The char ID could not be recognised. + + + + + You have set your offset to + + + + + Your offset must be between -100% and 100%! + + + + + That offset does not look like one. + + + + + You switched your music and area list. + + + + + You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this. + + + + + Your pre-animations interrupt again. + + + + + Your pre-animations will not interrupt text. + + + + + Couldn't open chatlog.txt to write into. + + + + + The IC chatlog has been saved. + + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely the case file you're looking for can't be found in there. + + + + + Too many arguments to load a case! You only need one filename, without extension. + + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely that you somehow deleted it. + + + + + You need to give a filename to save (extension not needed) and the courtroom status! + + + + + Too many arguments to save a case! You only need a filename without extension and the courtroom status! + + + + + Succesfully saved, edit doc and cmdoc link on the ini! + + + + + Master + + + + + Reason: + + + + + Call Moderator + + + + + + Error + + + + + You must provide a reason. + + + + + The message is too long. + + + + + Choose... + + + + + Images (*.png) + + + + + Add new evidence... + + + + + Lobby + + + Attorney Online 2 + + + + + Name + + + + + It doesn't look like your client is set up correctly. +Did you download all resources correctly from tiny.cc/getao, including the large 'base' folder? + + + + + Version: %1 + + + + + Loading + + + + + Cancel + + + + + <h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Special thanks:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy + + + + + Online: %1/%2 + + + + + + Offline + + + + + debug_functions + + + Error: %1 + + + + + Error + + + + + Notice + + + + diff --git a/resource/translations/ao_es.qm b/resource/translations/ao_es.qm new file mode 100644 index 0000000..214af27 Binary files /dev/null and b/resource/translations/ao_es.qm differ diff --git a/resource/translations/ao_es.ts b/resource/translations/ao_es.ts new file mode 100644 index 0000000..2ccccd6 --- /dev/null +++ b/resource/translations/ao_es.ts @@ -0,0 +1,881 @@ + + + + + AOApplication + + + Disconnected from server. + Desconectado del servidor. + + + + Error connecting to master server. Will try again in %1 seconds. + Error al conectarse a la lista de servidores. Se intentará nuevamente en %1 segundos. + + + + 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. + I translated master servers as "lista de servidores" because literally nobody will understand if i make the literal translation "servidor maestro". 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't think the average user will understand this even if i do a good translation. + Hubo un error al obtener la lista de servidores. Verifique su conexión a Internet y firewall, y vuelva a intentarlo. + + + + Outdated version! Your version: %1 +Please go to aceattorneyonline.com to update. + ¡Versión desactualizada! Su versión: %1 Vaya a aceattorneyonline.com para actualizar. + + + + You have been exiled from AO. +Have a nice day. + Has sido exiliado de AO. +Que tengas un buen día. + + + + Attorney Online 2 + Attorney Online 2 + + + + Loading + Cargando + + + + Loading evidence: +%1/%2 + Cargando evidencia: +%1/%2 + + + + + Loading music: +%1/%2 + Cargando música: +%1/%2 + + + + Loading chars: +%1/%2 + Cargando personajes: +%1/%2 + + + + You have been kicked from the server. +Reason: %1 + Has sido expulsado del servidor. +Razón: %1 + + + + You have been banned from the server. +Reason: %1 + + + + + You are banned on this server. +Reason: %1 + Has sido baneado en este servidor. +Razón: %1 + + + You have been kicked from the server. +Reason: + Has sido expulsado del servidor. +Razón: + + + You are banned on this server. +Reason: + Has sido baneado en este servidor. +Razón: + + + + AOCaseAnnouncerDialog + + + Case Announcer + Anunciar caso + + + + Case title: + Título del caso: + + + + Defense needed + Se necesita defensa + + + + Prosecution needed + Se necesita fiscal + + + + Judge needed + Se necesita juez + + + + Jurors needed + Se necesita jurado + + + + Stenographer needed + Se necesita taquígrafo + + + + AOOptionsDialog + + + Settings + Ajustes + + + + Gameplay + Jugabilidad + + + + Theme: + Tema visual: + + + + Sets the theme used in-game. If the new theme changes the lobby's look as well, you'll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it. + 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. + + + + Log goes downwards: + Invertir historial IC: + + + + If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked. + Si está marcado, los nuevos mensajes aparecerán en la parte inferior (como el chat OOC). + + + + Log length: + Longitud del historial: + + + + The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as 'infinite'. + La cantidad de mensajes que mantendrá el historial del chat IC antes de eliminar mensajes más antiguos. 0 significa 'infinito'. + + + + Default username: + Usuario predeterminado: + + + + Your OOC name will be automatically set to this value when you join a server. + Su nombre OOC se establecerá automáticamente a este cuando se una a un servidor. + + + + Custom shownames: + Mostrar nombres: + + + + Gives the default value for the in-game 'Custom shownames' tickbox, which in turn determines whether the client should display custom in-character names. + Activa la casilla 'Mostrar nombres' de forma predeterminada en el juego, que a su vez determina si el cliente debe mostrar nombres personalizados en los personajes. + + + + Backup MS: + MS de respaldo: + + + + If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address. + Si la lista de servidores predeterminada falla, el juego probará la dirección proporcionada aquí. + + + + Discord: + + + + + Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for. + Permite a otros en Discord ver en qué servidor estás, qué personaje juegas y cuánto tiempo has estado jugando. + + + + Language: + Idioma: + + + + Sets the language if you don't want to use your system language. + Establece el idioma si no desea utilizar el idioma de su sistema. + + + + Callwords + + + + + <html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html> + <html><head/><body>Ingrese tantas palabras de llamada como desee.<br>Esto no distingue entre mayúsculas y minúsculas. ¡Asegúrese de dejar cada palabra en su propia línea!<br>No deje una línea con un espacio al final; recibirá una alerta cada vez que alguien use un espacio en sus mensajes.</body></html> + + + + Audio + Audio + + + + Audio device: + Dispositivo: + + + + Sets the audio device for all sounds. + Establece el dispositivo de audio. + + + + Music: + Música: + + + + Sets the music's default volume. + Establece el volumen predeterminado de la música. + + + + SFX: + + + + + Sets the SFX's default volume. Interjections and actual sound effects count as 'SFX'. + Establece el volumen predeterminado de SFX. Las interjecciones y los efectos de sonido reales cuentan como 'SFX'. + + + + Blips: + + + + + Sets the volume of the blips, the talking sound effects. + Establece el volumen de los blips, el sonido al hablar. + + + + Blip rate: + Tasa de blips: + + + + Sets the delay between playing the blip sounds. + Establece el retraso entre la reproducción de los sonidos blip. + + + + Blank blips: + Blips en blanco: + + + + If true, the game will play a blip sound even when a space is 'being said'. + Si está marcada, el juego reproducirá un sonido blip incluso cuando se 'dice' un espacio. + + + + Casing + Caso + + + + This server supports case alerts. + Este servidor admite alertas de casos. + + + + This server does not support case alerts. + Este servidor no admite alertas de casos. + + + + Pretty self-explanatory. + Bastante autoexplicativo. + + + + Casing: + Caso: + + + + If checked, you will get alerts about case announcements. + Si está marcado, recibirá anuncios de casos. + + + + Defense: + Defensa: + + + + If checked, you will get alerts about case announcements if a defense spot is open. + Si está marcado, recibirá alertas sobre anuncios de casos si hay un lugar de defensa abierto. + + + + Prosecution: + Fiscal: + + + + If checked, you will get alerts about case announcements if a prosecutor spot is open. + Si está marcada, recibirá alertas sobre anuncios de casos si hay un puesto de fiscal abierto. + + + + Judge: + Juez: + + + + If checked, you will get alerts about case announcements if the judge spot is open. + Si está marcado, recibirá alertas sobre anuncios de casos si el puesto de juez está abierto. + + + + Juror: + Jurado: + + + + If checked, you will get alerts about case announcements if a juror spot is open. + Si está marcado, recibirá alertas sobre anuncios de casos si hay un puesto de jurado abierto. + + + + Stenographer: + Taquígrafo: + + + + If checked, you will get alerts about case announcements if a stenographer spot is open. + Si está marcado, recibirá alertas sobre anuncios de casos si hay un lugar de taquígrafo abierto. + + + + CM: + + + + + If checked, you will appear amongst the potential CMs on the server. + Si está marcado, aparecerá entre los posibles CM en el servidor. + + + + Hosting cases: + + + + + If you're a CM, enter what cases you are willing to host. + Si eres un CM, ingresa qué casos estás dispuesto a organizar. + + + + Courtroom + + + Password + Contraseña + + + + Spectator + Espectador + + + + + Search + Buscar + + + + Passworded + Contraseña + + + + Taken + En uso + + + + Generating chars: +%1/%2 + Generando personajes: +%1/%2 + + + Generating chars: + + Generando personajes: + + + + + Showname + + + + + Message + Mensaje + + + + Name + Nombre + + + + Pre + + + + + Flip + + + + + Guard + Guardia + + + + + Casing + Caso + + + + Shownames + + + + + No Interrupt + + + + + White + Blanco + + + + Green + Verde + + + + Red + Rojo + + + + Orange + Naranja + + + + Blue + Azul + + + + Yellow + Amarillo + + + + Rainbow + Arcoíris + + + + Pink + Rosado + + + + Cyan + Cian + + + + % offset + % desplazamiento + + + + Music + + + + + Sfx + + + + + Blips + + + + + Log limit + + + + + Change character + + + + + Reload theme + + + + + Call mod + + + + + Settings + Ajustes + + + + A/M + + + + + Preanim + + + + + Back to Lobby + Volver al lobby + + + + You were granted the Guard button. + Te ha sido otorgado el botón Guardia. + + + + This does nothing, but there you go. + Esto no hace nada, pero ahí lo tienes. + + + + You opened the settings menu. + Abriste el menú de configuración. + + + + You will now pair up with + Ahora te emparejarás con + + + + if they also choose your character in return. + si ellos también eligen a tu personaje a cambio. + + + + You are no longer paired with anyone. + Ya no estás emparejado con nadie. + + + + Are you sure you typed that well? The char ID could not be recognised. + ¿Estás seguro de que lo escribiste bien? El ID de personaje no pudo ser reconocido. + + + + You have set your offset to + Ha configurado su desplazamiento en + + + + Your offset must be between -100% and 100%! + ¡Su desplazamiento debe estar entre -100% y 100%! + + + + That offset does not look like one. + Ese desplazamiento no se parece a uno. + + + + You switched your music and area list. + Cambiaste tu lista de música y área. + + + + You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this. + Ha habilitado forzosamente funciones que el servidor puede no admitir. Es posible que no pueda hablar IC, o peor, debido a esto. + + + + Your pre-animations interrupt again. + Sus pre-animaciones interrumpen de nuevo. + + + + Your pre-animations will not interrupt text. + Sus pre-animaciones no interrumpirán el texto. + + + + Couldn't open chatlog.txt to write into. + No se pudo abrir chatlog.txt para escribir. + + + + The IC chatlog has been saved. + El chat IC se ha guardado. + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely the case file you're looking for can't be found in there. + ¡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í. + + + + 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 + ¡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 + + + + Case made by %1. + Caso hecho por %1. + + + + Navigate to %1 for the CM doc. + Navegue a %1 para el documento del CM. + + + + Your case "%1" was loaded! + Su caso "%1" fue cargado! + + + 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: + ¡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: + + + + Too many arguments to load a case! You only need one filename, without extension. + ¡Demasiados argumentos para cargar un caso! Solo necesita un nombre de archivo, sin extensión. + + + Case made by + Caso hecho por + + + Navigate to + Navegue a + + + for the CM doc. + para el documento de CM. + + + Your case " + Su caso " + + + " was loaded! + " fue cargado! + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely that you somehow deleted it. + ¡No tienes una carpeta `base/cases /`! Fue creada para ti. + + + + You need to give a filename to save (extension not needed) and the courtroom status! + ¡Debe dar un nombre de archivo para guardar (no se necesita la extensión) y el estado de la sala del tribunal! + + + + Too many arguments to save a case! You only need a filename without extension and the courtroom status! + why two exclamations, seems excesive. + ¡Demasiados argumentos para salvar un caso! Solo necesita un nombre de archivo sin extensión y el estado de la sala del tribunal. + + + + Succesfully saved, edit doc and cmdoc link on the ini! + ¡Guardado con éxito, puede editar el doc y doc link en el archivo ini! + + + + Master + + + + + + Server + + + + + Reason: + Razón: + + + + Call Moderator + Llamar Moderador + + + + + Error + Error + + + + You must provide a reason. + Debes proporcionar una razón. + + + + The message is too long. + El mensaje es muy largo. + + + + Choose... + Elegir... + + + + Images (*.png) + Imágenes (* .png) + + + + Add new evidence... + Añadir nueva evidencia... + + + + Lobby + + + Attorney Online 2 + Attorney Online 2 + + + + Name + Nombre + + + + It doesn't look like your client is set up correctly. +Did you download all resources correctly from tiny.cc/getao, including the large 'base' folder? + No parece que su cliente esté configurado correctamente. +¿Descargó todos los recursos correctamente desde tiny.cc/getao, incluida la gran carpeta 'base'? + + + + Version: %1 + Versión: %1 + + + + Loading + Cargando + + + + Cancel + Cancelar + + + + <h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Special thanks:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy + <h2>Attorney Online %1</h2>El simulador de drama de la sala del tribunal<p><b>Código fuente:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https: //github.com/AttorneyOnline/AO2-Client</a><p><b>Desarrollo mayor:</b> <br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Agradecimiento especial:</b><br>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 + + + + Online: %1/%2 + En línea: %1/%2 + + + + + Offline + Fuera de línea + + + + debug_functions + + + Error: %1 + + + + + Error + Error + + + + Notice + + + + diff --git a/resource/translations/ao_jp.qm b/resource/translations/ao_jp.qm new file mode 100644 index 0000000..e4fb562 Binary files /dev/null and b/resource/translations/ao_jp.qm differ diff --git a/resource/translations/ao_jp.ts b/resource/translations/ao_jp.ts new file mode 100644 index 0000000..4f8153a --- /dev/null +++ b/resource/translations/ao_jp.ts @@ -0,0 +1,849 @@ + + + + + AOApplication + + + Disconnected from server. + + + + + Error connecting to master server. Will try again in %1 seconds. + + + + + 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. + + + + + Outdated version! Your version: %1 +Please go to aceattorneyonline.com to update. + + + + + You have been exiled from AO. +Have a nice day. + + + + + Attorney Online 2 + + + + + Loading + ロード中 + + + + Loading evidence: +%1/%2 + 証拠がロード中: %1/%2 + + + + + Loading music: +%1/%2 + 音楽がロード中: %1/%2 + + + + Loading chars: +%1/%2 + キャラがロード中: %1/%2 + + + + You have been kicked from the server. +Reason: %1 + + + + + You have been banned from the server. +Reason: %1 + + + + + You are banned on this server. +Reason: %1 + + + + + AOCaseAnnouncerDialog + + + Case Announcer + + + + + Case title: + + + + + Defense needed + + + + + Prosecution needed + + + + + Judge needed + + + + + Jurors needed + + + + + Stenographer needed + + + + + AOOptionsDialog + + + Settings + + + + + Gameplay + + + + + Theme: + + + + + Sets the theme used in-game. If the new theme changes the lobby's look as well, you'll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it. + + + + + Log goes downwards: + + + + + If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked. + + + + + Log length: + + + + + The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as 'infinite'. + + + + + Default username: + + + + + Your OOC name will be automatically set to this value when you join a server. + + + + + Custom shownames: + + + + + Gives the default value for the in-game 'Custom shownames' tickbox, which in turn determines whether the client should display custom in-character names. + + + + + Backup MS: + + + + + If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address. + + + + + Discord: + + + + + Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for. + + + + + Language: + + + + + Sets the language if you don't want to use your system language. + + + + + Callwords + + + + + <html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html> + + + + + Audio + + + + + Audio device: + + + + + Sets the audio device for all sounds. + + + + + Music: + 音楽: + + + + Sets the music's default volume. + + + + + SFX: + 効果音: + + + + Sets the SFX's default volume. Interjections and actual sound effects count as 'SFX'. + + + + + Blips: + ブリップ: + + + + Sets the volume of the blips, the talking sound effects. + + + + + Blip rate: + + + + + Sets the delay between playing the blip sounds. + + + + + Blank blips: + + + + + If true, the game will play a blip sound even when a space is 'being said'. + + + + + Casing + + + + + This server supports case alerts. + + + + + This server does not support case alerts. + + + + + Pretty self-explanatory. + + + + + Casing: + + + + + If checked, you will get alerts about case announcements. + + + + + Defense: + + + + + If checked, you will get alerts about case announcements if a defense spot is open. + + + + + Prosecution: + + + + + If checked, you will get alerts about case announcements if a prosecutor spot is open. + + + + + Judge: + + + + + If checked, you will get alerts about case announcements if the judge spot is open. + + + + + Juror: + + + + + If checked, you will get alerts about case announcements if a juror spot is open. + + + + + Stenographer: + + + + + If checked, you will get alerts about case announcements if a stenographer spot is open. + + + + + CM: + + + + + If checked, you will appear amongst the potential CMs on the server. + + + + + Hosting cases: + + + + + If you're a CM, enter what cases you are willing to host. + + + + + Courtroom + + + Password + + + + + Spectator + 観客 + + + + + Search + + + + + Passworded + + + + + Taken + + + + + Generating chars: +%1/%2 + + + + + Showname + + + + + Message + + + + + Name + 名前 + + + + Pre + + + + + Flip + フリップ + + + + Guard + ガード + + + + + Casing + + + + + Shownames + + + + + No Interrupt + + + + + White + + + + + Green + + + + + Red + + + + + Orange + オレンジ + + + + Blue + + + + + Yellow + 黄色 + + + + This does nothing, but there you go. + + + + + 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 + + + + + Case made by %1. + + + + + Navigate to %1 for the CM doc. + + + + + Your case "%1" was loaded! + + + + + + Server + + + + + Back to Lobby + ロビーに戻る + + + + Rainbow + + + + + Pink + + + + + Cyan + + + + + % offset + + + + + Music + 音楽 + + + + Sfx + 効果音 + + + + Blips + ブリップ + + + + Log limit + + + + + Change character + + + + + Reload theme + + + + + Call mod + + + + + Settings + + + + + A/M + + + + + Preanim + + + + + You were granted the Guard button. + + + + + You opened the settings menu. + + + + + You will now pair up with + + + + + if they also choose your character in return. + + + + + You are no longer paired with anyone. + + + + + Are you sure you typed that well? The char ID could not be recognised. + + + + + You have set your offset to + + + + + Your offset must be between -100% and 100%! + + + + + That offset does not look like one. + + + + + You switched your music and area list. + + + + + You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this. + + + + + Your pre-animations interrupt again. + + + + + Your pre-animations will not interrupt text. + + + + + Couldn't open chatlog.txt to write into. + + + + + The IC chatlog has been saved. + + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely the case file you're looking for can't be found in there. + + + + + Too many arguments to load a case! You only need one filename, without extension. + + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely that you somehow deleted it. + + + + + You need to give a filename to save (extension not needed) and the courtroom status! + + + + + Too many arguments to save a case! You only need a filename without extension and the courtroom status! + + + + + Succesfully saved, edit doc and cmdoc link on the ini! + + + + + Master + マスター + + + + Reason: + + + + + Call Moderator + モデレーターを呼ぶ + + + + + Error + エラー + + + + You must provide a reason. + + + + + The message is too long. + + + + + Choose... + 選択... + + + + Images (*.png) + イメージ (*.png) + + + + Add new evidence... + 新しい証拠を付け加える... + + + + Discord + + Objection! + 意義あり! + + + In Lobby + ロビーでいる + + + Idle + 落ちている + + + In a Server + サーバーでいます + + + Spectating + 観客している + + + + Lobby + + + Attorney Online 2 + + + + + Name + 名前 + + + + It doesn't look like your client is set up correctly. +Did you download all resources correctly from tiny.cc/getao, including the large 'base' folder? + + + + + Version: %1 + + + + + Loading + ロード中 + + + + Cancel + キャンセル + + + + <h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Special thanks:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy + + + + + Online: %1/%2 + + + + + + Offline + オフライン + + + + debug_functions + + + Error: %1 + エラー: %1 + + + + Error + エラー + + + + Notice + + + + diff --git a/resource/translations/ao_ru.qm b/resource/translations/ao_ru.qm new file mode 100644 index 0000000..19bf0a9 Binary files /dev/null and b/resource/translations/ao_ru.qm differ diff --git a/resource/translations/ao_ru.ts b/resource/translations/ao_ru.ts new file mode 100644 index 0000000..9714c9d --- /dev/null +++ b/resource/translations/ao_ru.ts @@ -0,0 +1,855 @@ + + + + + AOApplication + + + Disconnected from server. + Соединение с сервером прервано. + + + + Error connecting to master server. Will try again in %1 seconds. + Ошибка соединения с главным сервером. Попытка пересоединения будет через %1 с. + + + + 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. + Произошла ошибка соединения с главным сервером. +Пожалуйста, проверьте ваши Интернет-соединение, настройки браундмауэра, и попробуйте перезайти. + + + + Outdated version! Your version: %1 +Please go to aceattorneyonline.com to update. + Устаревшая версия! У вас установлена %1 +Проследуйте на сайт aceattorneyonline.com для обновления. + + + + You have been exiled from AO. +Have a nice day. + Из AO вас отправили в жизнь. +Хорошего дня. + + + + Attorney Online 2 + Attorney Online 2 + + + + Loading + Загрузка + + + + Loading evidence: +%1/%2 + Загрузка вещдоков: +%1/%2 + + + + + Loading music: +%1/%2 + Загрузка музыки: +%1/%2 + + + + Loading chars: +%1/%2 + Загрузка персонажей: +%1/%2 + + + + You have been kicked from the server. +Reason: %1 + Вас выпнули с сервера. +Причина: %1 + + + + You have been banned from the server. +Reason: %1 + + + + + You are banned on this server. +Reason: %1 + Вас отправили в баню. +Причина: %1 + + + You have been kicked from the server. +Reason: + Вас выпнули с сервера. +Причина: + + + You are banned on this server. +Reason: + Вас отправили в баню. +Причина: + + + + AOCaseAnnouncerDialog + + + Case Announcer + Материалы дела + + + + Case title: + Название: + + + + Defense needed + Сторона защиты + + + + Prosecution needed + Сторона обвинения + + + + Judge needed + Без судьи никак + + + + Jurors needed + Суд присяжных + + + + Stenographer needed + Нужен стенографист? + + + + AOOptionsDialog + + + Settings + Настройки + + + + Gameplay + Игра + + + + Theme: + Тема: + + + + Sets the theme used in-game. If the new theme changes the lobby's look as well, you'll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it. + Устанавливает внешний вид игры. Может понадобиться перезайти на сервер. + + + + Log goes downwards: + Портянку вниз: + + + + If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked. + Отметьте галочку, если хотите, чтобы сообщения в игровом чате отображались снизу, а не сверху. + + + + Log length: + Длина игрового чата: + + + + The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as 'infinite'. + Количество сообщений, максимально хранимых в игровом чате. Значение, равное 0 или меньше, будет расценено как снятие такого ограничения. + + + + Default username: + Никнейм по умолчанию: + + + + Your OOC name will be automatically set to this value when you join a server. + Псевдоним, используемый при соединении с сервером. В основном, его видно в чате сервера. + + + + Custom shownames: + Произвольные имена: + + + + Gives the default value for the in-game 'Custom shownames' tickbox, which in turn determines whether the client should display custom in-character names. + Отображать произвольные имена персонажей, установленные самими игроками. + + + + Backup MS: + Запасной ГС: + + + + If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address. + Отображать перечень серверов от главного сервера, указанного здесь, когда не удалось соединиться с первичным ГС. + + + + Discord: + Discord: + + + + Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for. + Показать в Discord сервер, на котором вы играете, каким персонажем управляете и время игры. + + + + Language: + Язык: + + + + Sets the language if you don't want to use your system language. + + + + + Callwords + Позывные + + + + <html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html> + <html><head/><body>Введите на отдельных строках свои позывные, при указании которых в сообщениях будет подан звуковой сигнал.</body></html> + + + + Audio + Аудио + + + + Audio device: + Устройство воспроизведения: + + + + Sets the audio device for all sounds. + Куда вещать звук из игры. + + + + Music: + Музыка: + + + + Sets the music's default volume. + Громкость музыки по умолчанию. + + + + SFX: + Звук. эффекты: + + + + Sets the SFX's default volume. Interjections and actual sound effects count as 'SFX'. + Громкость звуковых эффектов по умолчанию. + + + + Blips: + Сигналы: + + + + Sets the volume of the blips, the talking sound effects. + Громкость сигналов, заменяющих голос, по умолчанию. + + + + Blip rate: + Пер. сигналов: + + + + Sets the delay between playing the blip sounds. + Период между сигналами, заменяющими голос, по умолчанию. + + + + Blank blips: + Пустые сигналы: + + + + If true, the game will play a blip sound even when a space is 'being said'. + Проигрывать сигналы даже для пробелов. + + + + Casing + Заседание + + + + This server supports case alerts. + Этот сервер поддерживает объявление заседания. + + + + This server does not support case alerts. + Этот сервер не поддерживает объявление заседания. + + + + Pretty self-explanatory. + Весьма доходчиво. + + + + Casing: + Новое дело: + + + + If checked, you will get alerts about case announcements. + При заведении дела вы получите уведомление. + + + + Defense: + Защита: + + + + If checked, you will get alerts about case announcements if a defense spot is open. + При заведении дела, в котором нужна сторона защиты, вы получите уведомление. + + + + Prosecution: + Обвинение: + + + + If checked, you will get alerts about case announcements if a prosecutor spot is open. + При заведении дела, в котором нужна сторона обвинения, вы получите уведомление. + + + + Judge: + Судья: + + + + If checked, you will get alerts about case announcements if the judge spot is open. + При заведении дела, в котором нужен судья, вы получите уведомление. + + + + Juror: + Присяжный: + + + + If checked, you will get alerts about case announcements if a juror spot is open. + При заведении дела, в котором нужны присяжные заседатели, вы получите уведомление. + + + + Stenographer: + Стенографист: + + + + If checked, you will get alerts about case announcements if a stenographer spot is open. + При заведении дела, в котором нужна стенография, вы получите уведомление. + + + + CM: + ПД: + + + + If checked, you will appear amongst the potential CMs on the server. + Отметьте, если вы хотите состоять в числе производителей дел. + + + + Hosting cases: + ПД акт.: + + + + If you're a CM, enter what cases you are willing to host. + Будучи производителем дела (ПД), вы можете войти в зону и заниматься её оркестровкой. + + + + Courtroom + + + Password + Пароль + + + + Spectator + Наблюдатель + + + + + Search + Поиск + + + + Passworded + Ограничен паролем + + + + Taken + Занят + + + + Generating chars: +%1/%2 + Генерация персонажей: +%1/%2 + + + Generating chars: + + Генерация персонажей: + + + + + Showname + Имя + + + + Message + Сообщение + + + + Name + Никнейм + + + + Pre + Пред. + + + + Flip + Разв. + + + + Guard + Охрана + + + + + Casing + Дело + + + + Shownames + Произв. имена + + + + No Interrupt + Говорить сразу + + + + White + Белый + + + + Green + Зелëный + + + + Red + Красный + + + + Orange + Оранжевый + + + + Blue + Синий + + + + Yellow + Жëлтый + + + + This does nothing, but there you go. + В общем-то, это ни на что не влияет... + + + + 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 + Укажите имя файла с делом (без расширения) для загрузки. Убедитесь, что оно расположено в папке `base/cases`. +Были найдены: %1 + + + + Case made by %1. + Дело завëл игрок: %1. + + + + Navigate to %1 for the CM doc. + Перейдите к %1 для получения материалов дела. + + + + Your case "%1" was loaded! + Дело под кодовым названием "%1" готово! + + + + + Server + Сервер + + + + Back to Lobby + Назад в лобби + + + + Rainbow + Радужный + + + + Pink + Розовый + + + + Cyan + Голубой + + + + % offset + % сдвига + + + + Music + Музыка + + + + Sfx + Звук. эффекты + + + + Blips + Сигналы + + + + Log limit + + + + + Change character + + + + + Reload theme + + + + + Call mod + + + + + Settings + Настройки + + + + A/M + + + + + Preanim + + + + + You were granted the Guard button. + Теперь у вас есть кнопка "Охрана". + + + + You opened the settings menu. + Вы открыли меню настроек. + + + + You will now pair up with + Вы встанете парой с персонажем по имени + + + + if they also choose your character in return. + (если он выберет вас в ответ). + + + + You are no longer paired with anyone. + Теперь вы не стоите в парах. + + + + Are you sure you typed that well? The char ID could not be recognised. + Кажется, вам нужно поменять запрос: такой идентификатор персонажа не был найден. + + + + You have set your offset to + Вы установили сдвиг персонажа на + + + + Your offset must be between -100% and 100%! + Сдвиг персонажа должен быть между -100% и 100%! + + + + That offset does not look like one. + Неверный сдвиг персонажа. + + + + You switched your music and area list. + Вы переключили перечень зон и музыки. + + + + You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this. + Из-за того, что вы включили не поддержимаемые сервером возможности, он может не принять ваши сообщения. + + + + Your pre-animations interrupt again. + Персонаж будет говорить только после анимации. + + + + Your pre-animations will not interrupt text. + Персонаж будет говорить и во время анимации. + + + + Couldn't open chatlog.txt to write into. + Не могу открыть `chatlog.txt` для записи лога. + + + + The IC chatlog has been saved. + Лог игрового чата сохранëн. + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely the case file you're looking for can't be found in there. + Файл с делом не найден. Если найдëте, положите его в папку `base/cases/`, которую мы для вас создали. + + + + Too many arguments to load a case! You only need one filename, without extension. + Введите имя файла без расширения. + + + + You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely that you somehow deleted it. + Папка `base/cases/` отсутствует! + + + + You need to give a filename to save (extension not needed) and the courtroom status! + Введите имя файла (без расширения) и предоставьте статус зоны. + + + + Too many arguments to save a case! You only need a filename without extension and the courtroom status! + Убедитесь, что имя файла не содержит расширение. + + + + Succesfully saved, edit doc and cmdoc link on the ini! + Сохранение прошло успешно! + + + + Master + Мастер + + + + Reason: + Причина: + + + + Call Moderator + Позвать модератора + + + + + Error + Ошибка + + + + You must provide a reason. + Укажите причину. + + + + The message is too long. + Слишком длинный текст. + + + + Choose... + Выбрать... + + + + Images (*.png) + Изображения (*.png) + + + + Add new evidence... + Добавить новую улику... + + + + Lobby + + + Attorney Online 2 + Attorney Online 2 + + + + Name + Никнейм + + + + It doesn't look like your client is set up correctly. +Did you download all resources correctly from tiny.cc/getao, including the large 'base' folder? + Не похоже, что ваш клиент установлен правильно. +Скачали ли вы все ресурсы (tiny.cc/getao), включая огромную папку `base`? + + + + Version: %1 + Версия: %1 + + + + Loading + Загрузка + + + + Cancel + Отмена + + + + <h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Special thanks:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy + <h2>Attorney Online %1</h2>Симулятор судебной драмы<p><b>Исходный код:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Основной разработкой занимались:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Особенная благодарность:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (дизайн интерфейса), Draxirch (дизайн интерфейса), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy + + + + Online: %1/%2 + Онлайн: %1/%2 + + + + + Offline + Вне сети + + + + debug_functions + + + Error: %1 + Ошибка: %1 + + + + Error + Ошибка + + + + Notice + На заметку + + + diff --git a/resources.qrc b/resources.qrc index bc9f322..b8f62d1 100644 --- a/resources.qrc +++ b/resources.qrc @@ -2,5 +2,10 @@ resource/fonts/Ace-Attorney.ttf resource/logo.png + resource/translations/ao_de.qm + resource/translations/ao_en.qm + resource/translations/ao_jp.qm + resource/translations/ao_es.qm + resource/translations/ao_ru.qm diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index 4ef1edd..6213acd 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 4bfe9de..b5cb46f 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() + " - 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 9d579a7..0cfb775 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(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 7907b54..54b1b2d 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(); 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 77f2f35..a790610 100644 --- a/src/debug_functions.cpp +++ b/src/debug_functions.cpp @@ -1,11 +1,14 @@ +#include +#include + #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 ebef749..341bed0 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 4a96e56..c95fd49 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 80ea93b..6c7b151 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 #include +#include +#include + 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 942c275..b79ec30 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") {