Merge branch 'main' into mod-panel

This commit is contained in:
jvyden 2022-07-27 16:55:16 -04:00
commit cc7022cf48
No known key found for this signature in database
GPG key ID: 18BCF2BE0262B278
93 changed files with 2379 additions and 1426 deletions

View file

@ -21,46 +21,40 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>Home</value>
<value>الصفحة الرئيسية</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Users</value>
<value>المستخدمون</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Photos</value>
<value>صور</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>Levels</value>
<value>المستويات</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Authentication</value>
<value>تصديق الهوية</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Login / Register</value>
<value>حسابي</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">
<value>Profile</value>
<value>الملف الشخصي</value>
<comment>A quick shortcut on the header to take you to your profile if logged in.</comment>
</data>
<data name="header_adminPanel" xml:space="preserve">
<value>Admin Panel</value>
<value>لوحة التحكم</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Log out</value>
<value>تسجيل الخروج</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>Startseite</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Spieler</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Fotos</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>Levels</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Authentifizierung</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Anmelden / Registrieren</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">
<value>Profil</value>
<comment>A quick shortcut on the header to take you to your profile if logged in.</comment>
</data>
<data name="header_adminPanel" xml:space="preserve">
<value>Administrationsmenü</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Abmelden</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -21,34 +21,28 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>Home</value>
<value>Bahay</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Users</value>
<value>Mga gumagamit</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Photos</value>
<value>Mga larawan</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>Levels</value>
<value>Mga antas</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Authentication</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Login / Register</value>
<value>Mag-login / Magrehistro</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">

View file

@ -21,46 +21,40 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>Home</value>
<value>Page d'accueil</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Users</value>
<value>Utilisateurs</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Photos</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>Levels</value>
<value>Niveaux</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Authentication</value>
<value>Authentification</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Login / Register</value>
<value>Connexion / Inscription</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">
<value>Profile</value>
<value>Profil</value>
<comment>A quick shortcut on the header to take you to your profile if logged in.</comment>
</data>
<data name="header_adminPanel" xml:space="preserve">
<value>Admin Panel</value>
<value>Panneau d'administration</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Log out</value>
<value>Déconnexion</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -21,46 +21,40 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>Home</value>
<value>Baile</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Users</value>
<value>Úsáideoirí</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Photos</value>
<value>Grianghraif</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>Levels</value>
<value>Leibhéil</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Authentication</value>
<value>Fíordheimhniú</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Login / Register</value>
<value>Logáil isteach / Reoite</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">
<value>Profile</value>
<value>Próifíl</value>
<comment>A quick shortcut on the header to take you to your profile if logged in.</comment>
</data>
<data name="header_adminPanel" xml:space="preserve">
<value>Admin Panel</value>
<value>Painéal Riaracháin</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Log out</value>
<value>Logáil amach</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -21,32 +21,26 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>Strona Główna</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Gracze</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Zdjęcia</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>Poziomy</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Autoryzacja</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Login / Rejestracja</value>
<comment>A button on the header that lets you log in or register.</comment>

View file

@ -21,46 +21,40 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>Home</value>
<value>Início</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Users</value>
<value>Utilizadores</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Photos</value>
<value>Fotografias</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>Levels</value>
<value>Níveis</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Authentication</value>
<value>Autenticação</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Login / Register</value>
<value>Iniciar sessão / Registar-se</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">
<value>Profile</value>
<value>Perfil</value>
<comment>A quick shortcut on the header to take you to your profile if logged in.</comment>
</data>
<data name="header_adminPanel" xml:space="preserve">
<value>Admin Panel</value>
<value>Painel de Administração</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Log out</value>
<value>Terminar sessão</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -21,32 +21,26 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>Главная</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Пользователи</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Фотографии</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>Уровни</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Аутентификация</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Вход / Регистрация</value>
<comment>A button on the header that lets you log in or register.</comment>

View file

@ -21,32 +21,26 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>Startsida</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Användare</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Foton</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>Banor</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Autentisering</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Logga in / Registrera</value>
<comment>A button on the header that lets you log in or register.</comment>

View file

@ -21,46 +21,40 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>主页</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>用户</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>图片</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>追踪</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>Authentication</value>
<value>验证</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>Login / Register</value>
<value>登录/注册</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">
<value>Profile</value>
<value>侧面像</value>
<comment>A quick shortcut on the header to take you to your profile if logged in.</comment>
</data>
<data name="header_adminPanel" xml:space="preserve">
<value>Admin Panel</value>
<value>管理面板</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Log out</value>
<value>登出</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="header_home" xml:space="preserve">
<value>主頁</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>用戶</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>圖片</value>
<comment>A button on the header that takes you to a list of user-uploaded photos.</comment>
</data>
<data name="header_slots" xml:space="preserve">
<value>追踪</value>
<comment>A button on the header that takes you to a list of user-uploaded levels. Levels are internally referred to as "slots".</comment>
</data>
<data name="header_authentication" xml:space="preserve">
<value>驗證</value>
<comment>A button on the header that takes you to a list of authentication attempts.</comment>
</data>
<data name="header_loginRegister" xml:space="preserve">
<value>登錄/註冊</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">
<value>側面像</value>
<comment>A quick shortcut on the header to take you to your profile if logged in.</comment>
</data>
<data name="header_adminPanel" xml:space="preserve">
<value>管理面板</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>登出</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -18,21 +18,24 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="username" xml:space="preserve">
<value>Username</value>
<value>اسم المستخدم</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
<value>كلمة مرور</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
<value>تسجيل</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot Password?</value>
<value>هل نسيت كلمة المرور؟</value>
</data>
<data name="error" xml:space="preserve">
<value>Uh oh!</value>
<value>آه أوه!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Log In</value>
<value>دخول</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -35,4 +35,7 @@
<data name="log_in" xml:space="preserve">
<value>Log ind</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="username" xml:space="preserve">
<value>Benutzername</value>
</data>
<data name="password" xml:space="preserve">
<value>Passwort</value>
</data>
<data name="register" xml:space="preserve">
<value>Registrieren</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Passwort vergessen?</value>
</data>
<data name="error" xml:space="preserve">
<value>Uh oh!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Anmelden</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -35,4 +35,7 @@
<data name="log_in" xml:space="preserve">
<value>Log In</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -35,4 +35,7 @@
<data name="log_in" xml:space="preserve">
<value>Log In</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -24,15 +24,18 @@
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
<value>Magrehistro</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot Password?</value>
<value>Nakalimutan ang password?</value>
</data>
<data name="error" xml:space="preserve">
<value>Uh oh!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Log In</value>
<value>Mag log in</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -18,21 +18,24 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="username" xml:space="preserve">
<value>Username</value>
<value>Nom d'utilisateur</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
<value>Mot de passe</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
<value>Inscrire</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot Password?</value>
<value>Mot de passe oublié?</value>
</data>
<data name="error" xml:space="preserve">
<value>Uh oh!</value>
<value>Oh oh!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Log In</value>
<value>Ouvrir une session</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -18,21 +18,24 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="username" xml:space="preserve">
<value>Username</value>
<value>Ainm Úsáideora</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
<value>Pasfhocal</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
<value>Cláraigh</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot Password?</value>
<value>Dearmad ar pasfhocal?</value>
</data>
<data name="error" xml:space="preserve">
<value>Uh oh!</value>
<value>Ní hé seo!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Log In</value>
<value>Logáil isteach</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -35,4 +35,7 @@
<data name="log_in" xml:space="preserve">
<value>ログイン</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -35,4 +35,7 @@
<data name="log_in" xml:space="preserve">
<value>Logg in</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -18,21 +18,24 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="username" xml:space="preserve">
<value>Username</value>
<value>Nazwa użytkownika</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
<value>Hasło</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
<value>Zarejestruj</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot Password?</value>
<value>Nie pamiętasz hasła?</value>
</data>
<data name="error" xml:space="preserve">
<value>Uh oh!</value>
<value>Ups!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Log In</value>
<value>Zaloguj się</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -18,21 +18,24 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="username" xml:space="preserve">
<value>Username</value>
<value>Nome de utilizador</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
<value>Palavra-Passe</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
<value>Registar</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot Password?</value>
<value>Esqueceu-se da palavra-passe?</value>
</data>
<data name="error" xml:space="preserve">
<value>Uh oh!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Log In</value>
<value>Iniciar Sessão</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -18,21 +18,24 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="username" xml:space="preserve">
<value>Username</value>
<value>Имя пользователя</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
<value>Пароль</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
<value>Регистр</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot Password?</value>
<value>Забыли пароль?</value>
</data>
<data name="error" xml:space="preserve">
<value>Uh oh!</value>
<value>Упс!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Log In</value>
<value>Вход</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -35,4 +35,7 @@
<data name="log_in" xml:space="preserve">
<value>Logga in</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -21,10 +21,10 @@
<value>用户名</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
<value>密码</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
<value>注册</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>忘记密码?</value>
@ -35,4 +35,7 @@
<data name="log_in" xml:space="preserve">
<value>登入</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="username" xml:space="preserve">
<value>用戶名</value>
</data>
<data name="password" xml:space="preserve">
<value>密碼</value>
</data>
<data name="register" xml:space="preserve">
<value>註冊</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>忘記密碼?</value>
</data>
<data name="error" xml:space="preserve">
<value>哎呀!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>登入</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -36,4 +36,7 @@
<data name="log_in" xml:space="preserve">
<value>Log In</value>
</data>
<data name="unknown" xml:space="preserve">
<value>Unknown</value>
</data>
</root>

View file

@ -21,42 +21,34 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Welcome to {0}!</value>
<value>مرحبا بك في {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>You are currently logged in as {0}.</value>
<value>أنت حاليا مسجل الدخول كـ {0}.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>There are no users online. Why not hop on?</value>
<value>لا يوجد مستخدمون على الإنترنت. لماذا لا يتم الاستدعاء للعمل؟</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>There is 1 user currently online:</value>
<value>يوجد مستخدم واحد على الإنترنت:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>There are currently {0} users online:</value>
<value>يوجد حاليا {0} مستخدمين على الإنترنت:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>You have {0} authentication attempts pending. Click here to view them.</value>
<value>لديك {0} محاولات المصادقة المعلقة. انقر هنا لعرضها.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
<value>أحدث المستويات</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
<value>أحدث رموز الفريق</value>
</data>
</root>

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Willkommen bei {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>Du bist angemeldet als {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>Es ist niemand online. Lust auf ein Spiel?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>Gerade ist 1 Spieler online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>Gerade sind {0} Spieler online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>Es warten {0} Authentifizierungsversuche auf dich. Klicke hier, um sie dir anzusehen.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Neueste Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Neueste Team-Favoriten</value>
</data>
</root>

View file

@ -21,42 +21,34 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Welcome to {0}!</value>
<value>Maligayang pagdating sa {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>You are currently logged in as {0}.</value>
<value>Kasalukuyan kang naka-log in bilang {0}.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>There are no users online. Why not hop on?</value>
<value>Walang mga gumagamit online. Bakit hindi tumalon?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>There is 1 user currently online:</value>
<value>Mayroong 1 user na kasalukuyang online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>There are currently {0} users online:</value>
<value>Kasalukuyang may {0} user na online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>You have {0} authentication attempts pending. Click here to view them.</value>
<value>Mayroon kang {0} pagsubok sa pagpapatunay na nakabinbin. Mag-click dito upang tingnan ang mga ito.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
<value>Pinakabagong Antas</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
<value>Pinakabagong Mga Pinili ng Koponan</value>
</data>
</root>

View file

@ -21,42 +21,34 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Welcome to {0}!</value>
<value>Bienvenue à {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>You are currently logged in as {0}.</value>
<value>Vous êtes actuellement connecté en tant que {0}.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>There are no users online. Why not hop on?</value>
<value>Il n'y a aucun utilisateur en ligne. Pourquoi ne pas y aller ?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>There is 1 user currently online:</value>
<value>Il y a 1 utilisateur actuellement en ligne :</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>There are currently {0} users online:</value>
<value>Il y a actuellement {0} utilisateurs en ligne:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>You have {0} authentication attempts pending. Click here to view them.</value>
<value>Vous avez {0} tentatives d'authentification en attente. Cliquez ici pour les consulter.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
<value>Nouveaux Niveaux</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
<value>Dernières sélections d'équipe</value>
</data>
</root>

View file

@ -21,42 +21,34 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Welcome to {0}!</value>
<value>Fáilte go dtí {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>You are currently logged in as {0}.</value>
<value>Tá tú logáilte isteach mar {0} faoi láthair.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>There are no users online. Why not hop on?</value>
<value>Níl aon úsáideoirí ar líne. Cén fáth nár léim ar aghaidh?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>There is 1 user currently online:</value>
<value>Tá úsáideoir amháin ar líne faoi láthair:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>There are currently {0} users online:</value>
<value>Tá {0} úsáideoir ar líne faoi láthair:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>You have {0} authentication attempts pending. Click here to view them.</value>
<value>Tá {0} iarracht fíordheimhnithe ar fheitheamh agat. Cliceáil anseo chun iad a fheiceáil.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
<value>Leibhéil is Déanaí</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
<value>Roghanna Foirne is déanaí</value>
</data>
</root>

View file

@ -21,42 +21,34 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Welcome to {0}!</value>
<value>Witaj w {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>Jesteś zalogowany jako {0}.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>Nikt nie jest online. Dlaczego by nie zagrać?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>Jest 1 gracz online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>Obecnie jest {0} graczy online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>Masz {0} oczekujących prób autoryzacji. Kliknij tutaj, by je zobaczyć.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
<value>Najnowsze Poziomy</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
<value>Najnowsze Wybory Drużyny</value>
</data>
</root>

View file

@ -21,42 +21,34 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Welcome to {0}!</value>
<value>Bem-vindo ao {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>You are currently logged in as {0}.</value>
<value>Tem sessão iniciada como {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>There are no users online. Why not hop on?</value>
<value>Não há utilizadores online. Por que não entrar?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>There is 1 user currently online:</value>
<value>Há 1 utilizador online no momento:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>There are currently {0} users online:</value>
<value>Atualmente, existem {0} utilizadores online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>You have {0} authentication attempts pending. Click here to view them.</value>
<value>Você tem {0} tentativas de acesso pendentes. Clique aqui para visualizá-las.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
<value>Níveis novos</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
<value>Escolhas mais recentes da equipa</value>
</data>
</root>

View file

@ -21,42 +21,34 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Welcome to {0}!</value>
<value>Добро пожаловать в {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>Вы вошли как {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>Нет пользователей в сети. Почему бы и не поиграть?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>Сейчас в сети 1 пользователь:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>В настоящее время сейчас {0} онлайн:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>У вас есть {0} попыток аутентификации в ожидании. Нажмите здесь, чтобы просмотреть их.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
<value>Новые уровни</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
<value>Последние избранное</value>
</data>
</root>

View file

@ -21,41 +21,33 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Välkommen till {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>Du är inloggad som {0}.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>Ingen är online. Dags att gibba?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>1 användare är online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>{0} användare är online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>{0} autentiseringsförsök väntar. Klicka här för att visa dem.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Senaste Banor</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Senaste Team Picks</value>
</data>

View file

@ -21,42 +21,34 @@
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>Welcome to {0}!</value>
<value>欢迎来到 {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>You are currently logged in as {0}.</value>
<value>您当前以 {0} 身份登录。</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>There are no users online. Why not hop on?</value>
<value>没有用户在线。为什么不跳进去?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>There is 1 user currently online:</value>
<value>目前有 1 位用户在线:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>There are currently {0} users online:</value>
<value>目前有 {0} 位用户在线:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>You have {0} authentication attempts pending. Click here to view them.</value>
<value>您有 {0} 次身份验证尝试待处理。点击此处查看。</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
<value>最新关卡</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
<value>最新球队精选</value>
</data>
</root>

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="welcome" xml:space="preserve">
<value>歡迎來到 {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>您當前以 {0} 身份登錄。</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>沒有用戶在線。為什麼不跳進去?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>目前有 1 位用戶在線:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>目前有 {0} 位用戶在線:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>您有 {0} 次身份驗證嘗試待處理。點擊此處查看。</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>最新關卡</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>最新球隊精選</value>
</data>
</root>

View file

@ -60,6 +60,27 @@ public static class LocalizationManager
{
"eo-UY", "eo"
},
{
"ru-RU", "ru"
},
{
"pt-PT", "pt"
},
{
"no-NO", "no"
},
{
"pl-PL", "pl"
},
{
"fr-FR", "fr"
},
{
"de-DE", "de"
},
{
"da-DK", "da"
},
};
/// <summary>

View file

@ -18,12 +18,12 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>Logged Out</value>
<value>تم تسجيل الخروج</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>You have been successfully logged out. You will be redirected in 5 seconds, or you may click below to do so manually.</value>
<value>لقد تم تسجيل الخروج بنجاح. سيتم إعادة توجيهك في 5 ثوانٍ، أو يمكنك النقر أدناه للقيام بذلك يدوياً.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</value>
<value>إعادة توجيه</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>Abgemeldet</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>Du wurdest erfolgreich abgemeldet. Du wirst in 5 Sekunden automatisch zur Startseite weitergeleitet, oder du kannst den Knopf unten anklicken, um dies manuell zu tun.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Weiterleiten</value>
</data>
</root>

View file

@ -18,12 +18,12 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>Logged Out</value>
<value>Naka-log out</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>You have been successfully logged out. You will be redirected in 5 seconds, or you may click below to do so manually.</value>
<value>Matagumpay kang na-log out. Ire-redirect ka sa loob ng 5 segundo, o maaari kang mag-click sa ibaba upang gawin ito nang manu-mano.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</value>
<value>I-redirect</value>
</data>
</root>

View file

@ -18,12 +18,12 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>Logged Out</value>
<value>Déconnexion</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>You have been successfully logged out. You will be redirected in 5 seconds, or you may click below to do so manually.</value>
<value>Vous avez été déconnecté avec succès. Vous allez être redirigé dans 5 secondes, ou vous pouvez cliquer ci-dessous pour le faire manuellement.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</value>
<value>Rediriger</value>
</data>
</root>

View file

@ -18,12 +18,12 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>Logged Out</value>
<value>Logáilte Amach</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>You have been successfully logged out. You will be redirected in 5 seconds, or you may click below to do so manually.</value>
<value>Tá tú logáilte amach go rathúil. Déanfar tú a atreorú i 5 soicind, nó is féidir leat cliceáil thíos chun é sin a dhéanamh de láimh.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</value>
<value>Atreorú</value>
</data>
</root>

View file

@ -18,12 +18,12 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>Logged Out</value>
<value>Wylogowano</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>You have been successfully logged out. You will be redirected in 5 seconds, or you may click below to do so manually.</value>
<value>Zostałeś skutecznie wylogowany. Zostaniesz przekierowany na stronę główną za 5 sekund albo możesz kliknąć poniżej, żeby to zrobić ręcznie.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</value>
<value>Przekieruj na stronę główną</value>
</data>
</root>

View file

@ -18,12 +18,12 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>Logged Out</value>
<value>Terminar Sessão</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>You have been successfully logged out. You will be redirected in 5 seconds, or you may click below to do so manually.</value>
<value>Foi desconectado com sucesso. Será redirecionado em 5 segundos, ou pode clicar abaixo para fazê-lo manualmente.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</value>
<value>Redirecionar</value>
</data>
</root>

View file

@ -18,12 +18,12 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>Logged Out</value>
<value>Выход</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>You have been successfully logged out. You will be redirected in 5 seconds, or you may click below to do so manually.</value>
<value>Вы успешно вышли из системы. Вы будете перенаправлены через 5 секунд, или можете нажать ниже, чтобы сделать это вручную.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</value>
<value>Перенаправить</value>
</data>
</root>

View file

@ -18,12 +18,12 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>Logged Out</value>
<value>登出</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>You have been successfully logged out. You will be redirected in 5 seconds, or you may click below to do so manually.</value>
<value>您已成功注销。您将在 5 秒内被重定向,或者您可以点击下方手动进行重定向。</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</value>
<value>重定向</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="logged_out" xml:space="preserve">
<value>登出</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>您已成功註銷。您將在 5 秒內被重定向,或者您可以點擊下方手動進行重定向。</value>
</data>
<data name="redirect" xml:space="preserve">
<value>重定向</value>
</data>
</root>

View file

@ -21,6 +21,10 @@
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>LoggedOut.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="Status.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Status.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="currently_online" xml:space="preserve">
<value>Currently online on {0} on {1}</value>
</data>
<data name="offline" xml:space="preserve">
<value>Offline</value>
</data>
<data name="last_online" xml:space="preserve">
<value>Offline since {0}</value>
</data>
</root>

View file

@ -8,6 +8,7 @@ public static class GeneralStrings
public static readonly TranslatableString ForgotPassword = create("forgot_password");
public static readonly TranslatableString Error = create("error");
public static readonly TranslatableString LogIn = create("log_in");
public static readonly TranslatableString Unknown = create("unknown");
private static TranslatableString create(string key) => new(TranslationAreas.General, key);
}

View file

@ -0,0 +1,10 @@
namespace LBPUnion.ProjectLighthouse.Localization.StringLists;
public static class StatusStrings
{
public static readonly TranslatableString CurrentlyOnline = create("currently_online");
public static readonly TranslatableString LastOnline = create("last_online"); // TODO: implement
public static readonly TranslatableString Offline = create("offline");
private static TranslatableString create(string key) => new(TranslationAreas.LoggedOut, key);
}

View file

@ -130,7 +130,7 @@ public class LoginController : ControllerBase
new LoginResult
{
AuthTicket = "MM_AUTH=" + token.UserToken,
ServerBrand = VersionHelper.FullVersion,
ServerBrand = VersionHelper.EnvVer,
}.Serialize()
);
}

View file

@ -2,6 +2,7 @@
using System.Text.Json;
using System.Xml.Serialization;
using LBPUnion.ProjectLighthouse.Administration.Reports;
using LBPUnion.ProjectLighthouse.Configuration;
using LBPUnion.ProjectLighthouse.Helpers;
using LBPUnion.ProjectLighthouse.PlayerData.Profiles;
using LBPUnion.ProjectLighthouse.Types;
@ -45,6 +46,13 @@ public class ReportController : ControllerBase
this.database.Reports.Add(report);
await this.database.SaveChangesAsync();
await WebhookHelper.SendWebhook(
title: "New grief report",
description: $"Submitted by {user.Username}\n" +
$"To view it, click [here]({ServerConfiguration.Instance.ExternalUrl}/admin/report/{report.ReportId}).",
dest: WebhookHelper.WebhookDestination.Moderation
);
return this.Ok();
}

View file

@ -28,214 +28,10 @@
@foreach (GriefReport report in Model.Reports)
{
<div class="ui segment">
<div>
<canvas class="hide-subjects" id="canvas-subjects-@report.ReportId" width="1920" height="1080"
style="position: absolute; transform: rotate(180deg)">
</canvas>
<img class="hover-region" id="game-image-@report.ReportId" src="/gameAssets/@report.JpegHash" alt="Grief report picture" style="width: 100%; height: auto; border-radius: .28571429rem;">
</div>
<p>
<i>
Report submitted by
<b>
<a href="/user/@report.ReportingPlayerId">@report.ReportingPlayer.Username</a>
</b>
</i>
</p>
<b class="hover-players" id="hover-subjects-2-@report.ReportId">Report contains @report.XmlPlayers.Length @(report.XmlPlayers.Length == 1 ? "player" : "players")</b>
@foreach (ReportPlayer player in report.XmlPlayers)
{
<div id="hover-subjects-@report.ReportId" class="hover-players">
<a href="/">@player.Name</a>
</div>
@await Html.PartialAsync("Partials/ReportPartial", report)
}
<br>
<div>
<b>Report time: </b>@(DateTimeOffset.FromUnixTimeMilliseconds(report.Timestamp).ToString("R"))
</div>
<div>
<b>Report reason: </b>@report.Type
</div>
<div>
<b>Level ID:</b> @report.LevelId
</div>
<div>
<b>Level type:</b> @report.LevelType
</div>
<div>
<b>Level owner:</b> @report.LevelOwner
</div>
<br>
<a class="ui green small button" href="/moderation/report/@report.ReportId/dismiss">
<i class="checkmark icon"></i>
<span>Dismiss</span>
</a>
<a class="ui red small button" href="/moderation/report/@report.ReportId/remove">
<i class="trash icon"></i>
<span>Remove all related assets</span>
</a>
</div>
<script>
subjects[@report.ReportId] = @Html.Raw(report.Players)
bounds[@report.ReportId] = @Html.Raw(report.Bounds)
images[@report.ReportId] = document.getElementById("game-image-@report.ReportId")
canvases[@report.ReportId] = document.getElementById("canvas-subjects-@report.ReportId")
canvases[@report.ReportId].width = images[@report.ReportId].offsetWidth;
canvases[@report.ReportId].height = images[@report.ReportId].clientHeight;
ctx[@report.ReportId] = canvases[@report.ReportId].getContext('2d');
</script>
}
<script>
function getReportId(name){
let split = name.split("-");
return split[split.length-1];
}
const colours = ["#96dd3c", "#ceb424", "#cc0a1d", "#c800cc"];
let displayType;
window.addEventListener("load", function () {
document.querySelectorAll(".hover-players").forEach(item => {
item.addEventListener('mouseenter', function () {
let reportId = getReportId(item.id);
const canvas = canvases[reportId];
displayType = 1;
canvas.className = "photo-subjects";
redraw(reportId);
});
});
document.querySelectorAll(".hover-region").forEach(item => {
item.addEventListener('mouseenter', function () {
let reportId = getReportId(item.id);
const canvas = canvases[reportId];
const image = document.getElementById("game-image-" + reportId.toString());
displayType = 0;
canvas.className = "photo-subjects";
canvas.width = image.offsetWidth;
canvas.height = image.clientHeight; // space for names to hang off
redraw(reportId);
});
});
document.querySelectorAll(".hover-region, .hover-players").forEach(item => {
item.addEventListener('mouseleave', function () {
canvases[getReportId(item.id)].className = "photo-subjects hide-subjects";
});
});
}, false);
function redraw(reportId){
let context = ctx[reportId];
let canvas = canvases[reportId];
let image = images[reportId];
context.clearRect(0, 0, canvas.width, canvas.height);
let w = canvas.width;
let h = canvas.height;
// halfwidth, halfheight
const hw = w / 2;
const hh = h / 2;
switch (displayType){
case 0: {
let imageBounds = bounds[reportId];
const x1 = imageBounds.Left;
const x2 = imageBounds.Right;
const y1 = imageBounds.Top;
const y2 = imageBounds.Bottom;
const scaleX = image.naturalWidth / canvas.width;
const scaleY = image.naturalHeight / canvas.height;
const bx = canvas.width-(x2/scaleX);
const by = canvas.height-(y2/scaleY);
const bw = (x2 - x1) / scaleX;
const bh = (y2 - y1) / scaleY;
context.beginPath();
context.globalAlpha = 0.6;
context.fillStyle = "black";
context.fillRect(0, 0, canvas.width, canvas.height);
context.clearRect(bx, by, bw, bh);
context.beginPath();
context.lineWidth = 2;
context.strokeStyle = "#957a24";
context.rect(bx, by, bw, bh);
context.stroke();
context.globalAlpha = 1.0;
break;
}
case 1: {
let subject = subjects[reportId];
subject.forEach((s, si) => {
const colour = colours[si % 4];
// Bounding box
const x1 = s.Location.Left;
const x2 = s.Location.Right;
const y1 = s.Location.Top;
const y2 = s.Location.Bottom;
const scaleX = image.naturalWidth / canvas.width;
const scaleY = image.naturalHeight / canvas.height;
const bx = canvas.width-(x2/scaleX);
const by = canvas.height-(y2/scaleY);
const bw = (x2 - x1) / scaleX;
const bh = (y2 - y1) / scaleY;
context.beginPath();
context.lineWidth = 3;
context.strokeStyle = colour;
context.rect(bx, by, bw, bh);
context.stroke();
// Move into relative coordinates from bounding box
context.translate(bx, by);
// Username label
context.font = "16px Lato";
context.fillStyle = colour;
// Text width/height for the label background
const tw = context.measureText(s.Name).width;
const th = 24;
// Check if the label will flow off the bottom of the frame
const overflowBottom = (y2+tw - 24) > (canvas.width);
// Check if the label will flow off the left of the frame
const overflowLeft = (x2) < (24);
// Set alignment
context.textAlign = overflowLeft ? "start" : "end";
// Text x / y
const lx = overflowLeft ? -bw + 6 : -6;
const ly = overflowBottom ? -bh - 6 : 16;
// Label background x / y
const lbx = overflowLeft ? bw - tw - 12 : 0;
const lby = overflowBottom ? bh : -24;
// Draw background
context.fillRect(lbx, lby, tw+8, th);
// Draw text, rotated back upright (canvas draws rotated 180deg)
context.fillStyle = "white";
context.rotate(Math.PI);
context.fillText(s.Name, lx, ly);
// reset transform
context.setTransform(1, 0, 0, 1, 0, 0);
});
break;
}
}
}
</script>
@await Html.PartialAsync("Partials/RenderReportBoundsPartial")
@if (Model.PageNumber != 0)
{

View file

@ -46,16 +46,19 @@ public class BaseLayout : PageModel
set => this.user = value;
}
private string getLanguage()
private string? language;
public string GetLanguage()
{
if (ServerStatics.IsUnitTesting) return "en-US";
if (ServerStatics.IsUnitTesting) return LocalizationManager.DefaultLang;
if (this.language != null) return this.language;
IRequestCultureFeature? requestCulture = Request.HttpContext.Features.Get<IRequestCultureFeature>();
if (requestCulture == null) return this.language = LocalizationManager.DefaultLang;
if (requestCulture == null) return LocalizationManager.DefaultLang;
return requestCulture.RequestCulture.UICulture.Name;
return this.language = requestCulture.RequestCulture.UICulture.Name;
}
public string Translate(TranslatableString translatableString) => translatableString.Translate(this.getLanguage());
public string Translate(TranslatableString translatableString, params object?[] format) => translatableString.Translate(this.getLanguage(), format);
public string Translate(TranslatableString translatableString) => translatableString.Translate(this.GetLanguage());
public string Translate(TranslatableString translatableString, params object?[] format) => translatableString.Translate(this.GetLanguage(), format);
}

View file

@ -0,0 +1,147 @@
<script>
function getReportId(name){
let split = name.split("-");
return split[split.length-1];
}
const colours = ["#96dd3c", "#ceb424", "#cc0a1d", "#c800cc"];
let displayType;
window.addEventListener("load", function () {
document.querySelectorAll(".hover-players").forEach(item => {
item.addEventListener('mouseenter', function () {
let reportId = getReportId(item.id);
const canvas = canvases[reportId];
displayType = 1;
canvas.className = "photo-subjects";
redraw(reportId);
});
});
document.querySelectorAll(".hover-region").forEach(item => {
item.addEventListener('mouseenter', function () {
let reportId = getReportId(item.id);
const canvas = canvases[reportId];
const image = document.getElementById("game-image-" + reportId.toString());
displayType = 0;
canvas.className = "photo-subjects";
canvas.width = image.offsetWidth;
canvas.height = image.clientHeight; // space for names to hang off
redraw(reportId);
});
});
document.querySelectorAll(".hover-region, .hover-players").forEach(item => {
item.addEventListener('mouseleave', function () {
canvases[getReportId(item.id)].className = "photo-subjects hide-subjects";
});
});
}, false);
function redraw(reportId){
let context = ctx[reportId];
let canvas = canvases[reportId];
let image = images[reportId];
context.clearRect(0, 0, canvas.width, canvas.height);
let w = canvas.width;
let h = canvas.height;
// halfwidth, halfheight
const hw = w / 2;
const hh = h / 2;
switch (displayType){
case 0: {
let imageBounds = bounds[reportId];
const x1 = imageBounds.Left;
const x2 = imageBounds.Right;
const y1 = imageBounds.Top;
const y2 = imageBounds.Bottom;
const scaleX = image.naturalWidth / canvas.width;
const scaleY = image.naturalHeight / canvas.height;
const bx = canvas.width-(x2/scaleX);
const by = canvas.height-(y2/scaleY);
const bw = (x2 - x1) / scaleX;
const bh = (y2 - y1) / scaleY;
context.beginPath();
context.globalAlpha = 0.6;
context.fillStyle = "black";
context.fillRect(0, 0, canvas.width, canvas.height);
context.clearRect(bx, by, bw, bh);
context.beginPath();
context.lineWidth = 2;
context.strokeStyle = "#957a24";
context.rect(bx, by, bw, bh);
context.stroke();
context.globalAlpha = 1.0;
break;
}
case 1: {
let subject = subjects[reportId];
subject.forEach((s, si) => {
const colour = colours[si % 4];
// Bounding box
const x1 = s.Location.Left;
const x2 = s.Location.Right;
const y1 = s.Location.Top;
const y2 = s.Location.Bottom;
const scaleX = image.naturalWidth / canvas.width;
const scaleY = image.naturalHeight / canvas.height;
const bx = canvas.width-(x2/scaleX);
const by = canvas.height-(y2/scaleY);
const bw = (x2 - x1) / scaleX;
const bh = (y2 - y1) / scaleY;
context.beginPath();
context.lineWidth = 3;
context.strokeStyle = colour;
context.rect(bx, by, bw, bh);
context.stroke();
// Move into relative coordinates from bounding box
context.translate(bx, by);
// Username label
context.font = "16px Lato";
context.fillStyle = colour;
// Text width/height for the label background
const tw = context.measureText(s.Name).width;
const th = 24;
// Check if the label will flow off the bottom of the frame
const overflowBottom = (y2+tw - 24) > (canvas.width);
// Check if the label will flow off the left of the frame
const overflowLeft = (x2) < (24);
// Set alignment
context.textAlign = overflowLeft ? "start" : "end";
// Text x / y
const lx = overflowLeft ? -bw + 6 : -6;
const ly = overflowBottom ? -bh - 6 : 16;
// Label background x / y
const lbx = overflowLeft ? bw - tw - 12 : 0;
const lby = overflowBottom ? bh : -24;
// Draw background
context.fillRect(lbx, lby, tw+8, th);
// Draw text, rotated back upright (canvas draws rotated 180deg)
context.fillStyle = "white";
context.rotate(Math.PI);
context.fillText(s.Name, lx, ly);
// reset transform
context.setTransform(1, 0, 0, 1, 0, 0);
});
break;
}
}
}
</script>

View file

@ -0,0 +1,63 @@
@using LBPUnion.ProjectLighthouse.Administration.Reports
@model LBPUnion.ProjectLighthouse.Administration.Reports.GriefReport
<div class="ui segment">
<div>
<canvas class="hide-subjects" id="canvas-subjects-@Model.ReportId" width="1920" height="1080"
style="position: absolute; transform: rotate(180deg)">
</canvas>
<img class="hover-region" id="game-image-@Model.ReportId" src="/gameAssets/@Model.JpegHash" alt="Grief report picture" style="width: 100%; height: auto; border-radius: .28571429rem;">
</div>
<p>
<i>
Report submitted by
<b>
<a href="/user/@Model.ReportingPlayerId">@Model.ReportingPlayer.Username</a>
</b>
</i>
</p>
<b class="hover-players" id="hover-subjects-2-@Model.ReportId">Report contains @Model.XmlPlayers.Length @(Model.XmlPlayers.Length == 1 ? "player" : "players")</b>
@foreach (ReportPlayer player in Model.XmlPlayers)
{
<div id="hover-subjects-@Model.ReportId" class="hover-players">
<a href="/">@player.Name</a>
</div>
}
<br>
<div>
<b>Report time: </b>@(DateTimeOffset.FromUnixTimeMilliseconds(Model.Timestamp).ToString("R"))
</div>
<div>
<b>Report reason: </b>@Model.Type
</div>
<div>
<b>Level ID:</b> @Model.LevelId
</div>
<div>
<b>Level type:</b> @Model.LevelType
</div>
<div>
<b>Level owner:</b> @Model.LevelOwner
</div>
<br>
<a class="ui green small button" href="/admin/report/@Model.ReportId/dismiss">
<i class="checkmark icon"></i>
<span>Dismiss</span>
</a>
<a class="ui red small button" href="/admin/report/@Model.ReportId/remove">
<i class="trash icon"></i>
<span>Remove all related assets</span>
</a>
</div>
<script>
subjects[@Model.ReportId] = @Html.Raw(Model.Players)
bounds[@Model.ReportId] = @Html.Raw(Model.Bounds)
images[@Model.ReportId] = document.getElementById("game-image-@Model.ReportId")
canvases[@Model.ReportId] = document.getElementById("canvas-subjects-@Model.ReportId")
canvases[@Model.ReportId].width = images[@Model.ReportId].offsetWidth;
canvases[@Model.ReportId].height = images[@Model.ReportId].clientHeight;
ctx[@Model.ReportId] = canvases[@Model.ReportId].getContext('2d');
</script>

View file

@ -1,15 +1,18 @@
@using LBPUnion.ProjectLighthouse.Helpers
@using LBPUnion.ProjectLighthouse.Localization
@model LBPUnion.ProjectLighthouse.PlayerData.Profiles.User
@{
bool showLink = (bool?)ViewData["ShowLink"] ?? false;
bool isMobile = (bool?)ViewData["IsMobile"] ?? false;
string language = (string?)ViewData["Language"] ?? LocalizationManager.DefaultLang;
}
<div class="card">
@{
int size = isMobile ? 50 : 100;
}
<div class="cardIcon userCardIcon" style="background-image: url('/gameAssets/@Model.WebsiteAvatarHash'); min-width: @(size)px; width: @(size)px; height: @(size)px">
<div class="cardIcon userCardIcon" style="background-image: url('/gameAssets/@Model.WebsiteAvatarHash'); min-width: @(size)px; width: @(size)px; height: @(size)px; background-position: center center; background-size: auto @(size)px;">
</div>
<div class="cardStats">
@if (showLink)
@ -25,7 +28,7 @@
</h1>
}
<p>
<i>@Model.Status</i>
<i>@Model.Status.ToTranslatedString(language)</i>
</p>
<div class="cardStatsUnderTitle">
<i class="pink heart icon" title="Hearts"></i> <span>@Model.Hearts</span>

View file

@ -1,11 +1,12 @@
@page "/photos/{pageNumber:int}"
@using LBPUnion.ProjectLighthouse.Localization.StringLists
@using LBPUnion.ProjectLighthouse.PlayerData
@using LBPUnion.ProjectLighthouse.Types
@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.PhotosPage
@{
Layout = "Layouts/BaseLayout";
Model.Title = "Photos";
Model.Title = Model.Translate(BaseLayoutStrings.HeaderPhotos);
}
<p>There are @Model.PhotoCount total photos!</p>

View file

@ -0,0 +1,18 @@
@page "/admin/report/{reportId:int}"
@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.ReportPage
@{
Layout = "Layouts/BaseLayout";
Model.Title = $"Report {Model.Report.ReportId}";
}
<script>
let subjects = [];
let bounds = [];
let canvases = [];
let ctx = [];
let images = [];
</script>
@await Html.PartialAsync("Partials/ReportPartial", Model.Report)
@await Html.PartialAsync("Partials/RenderReportBoundsPartial")

View file

@ -0,0 +1,42 @@
using System.Text.Json;
using LBPUnion.ProjectLighthouse.Administration.Reports;
using LBPUnion.ProjectLighthouse.PlayerData.Profiles;
using LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
namespace LBPUnion.ProjectLighthouse.Servers.Website.Pages;
public class ReportPage : BaseLayout
{
public ReportPage(Database database) : base(database)
{}
public GriefReport Report;
public async Task<IActionResult> OnGet([FromRoute] int reportId)
{
User? user = this.Database.UserFromWebRequest(this.Request);
if (user == null) return this.Redirect("~/login");
if (!user.IsAdmin) return this.NotFound();
GriefReport? report = await this.Database.Reports
.Include(r => r.ReportingPlayer)
.FirstOrDefaultAsync(r => r.ReportId == reportId);
if (report == null) return this.NotFound();
report.XmlPlayers = (ReportPlayer[])JsonSerializer.Deserialize(report.Players,
typeof(ReportPlayer[]))!;
report.XmlBounds = new Marqee
{
Rect = (Rectangle)JsonSerializer.Deserialize(report.Bounds,
typeof(Rectangle))!,
};
this.Report = report;
return this.Page();
}
}

View file

@ -1,11 +1,12 @@
@page "/slots/{pageNumber:int}"
@using LBPUnion.ProjectLighthouse.Extensions
@using LBPUnion.ProjectLighthouse.Levels
@using LBPUnion.ProjectLighthouse.Localization.StringLists
@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.SlotsPage
@{
Layout = "Layouts/BaseLayout";
Model.Title = "Levels";
Model.Title = Model.Translate(BaseLayoutStrings.HeaderSlots);
}
<p>There are @Model.SlotCount total levels!</p>

View file

@ -46,6 +46,9 @@
{
"IsMobile", Model.Request.IsMobile()
},
{
"Language", Model.GetLanguage()
}
})
</div>
<div class="eight wide right aligned column">

View file

@ -1,12 +1,13 @@
@page "/users/{pageNumber:int}"
@using LBPUnion.ProjectLighthouse.Extensions
@using LBPUnion.ProjectLighthouse.Localization.StringLists
@using LBPUnion.ProjectLighthouse.PlayerData.Profiles
@using LBPUnion.ProjectLighthouse.Types
@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.UsersPage
@{
Layout = "Layouts/BaseLayout";
Model.Title = "Users";
Model.Title = Model.Translate(BaseLayoutStrings.HeaderUsers);
}
<p>There are @Model.UserCount total users.</p>
@ -31,6 +32,9 @@
{
"IsMobile", isMobile
},
{
"Language", Model.GetLanguage()
},
})
</div>
}

View file

@ -26,7 +26,7 @@ public class AuthenticationTests : LighthouseServerTest
Assert.True(response.IsSuccessStatusCode);
string responseContent = await response.Content.ReadAsStringAsync();
Assert.Contains("MM_AUTH=", responseContent);
Assert.Contains(VersionHelper.FullVersion, responseContent);
Assert.Contains(VersionHelper.EnvVer, responseContent);
}
[DatabaseFact]
@ -39,7 +39,7 @@ public class AuthenticationTests : LighthouseServerTest
Assert.NotNull(loginResult.ServerBrand);
Assert.Contains("MM_AUTH=", loginResult.AuthTicket);
Assert.Equal(VersionHelper.FullVersion, loginResult.ServerBrand);
Assert.Equal(VersionHelper.EnvVer, loginResult.ServerBrand);
}
[DatabaseFact]

View file

@ -58,7 +58,7 @@
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/TYPE_DECLARATION_BRACES/@EntryValue">NEXT_LINE</s:String>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_DECLARATION_LPAR/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_INVOCATION_LPAR/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_ARGUMENTS_STYLE/@EntryValue">WRAP_IF_LONG</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_ARGUMENTS_STYLE/@EntryValue">CHOP_IF_LONG</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_ARRAY_INITIALIZER_STYLE/@EntryValue">CHOP_IF_LONG</s:String>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue">True</s:Boolean>

View file

@ -3,4 +3,5 @@ namespace LBPUnion.ProjectLighthouse.Configuration.ConfigurationCategories;
public class CustomizationConfiguration
{
public string ServerName { get; set; } = "Project Lighthouse";
public string EnvironmentName { get; set; } = "project-lighthouse";
}

View file

@ -8,4 +8,6 @@ public class DiscordIntegrationConfiguration
public bool DiscordIntegrationEnabled { get; set; }
public string Url { get; set; } = "";
public string ModerationUrl { get; set; } = "";
}

View file

@ -23,7 +23,7 @@ public class ServerConfiguration
// You can use an ObsoleteAttribute instead. Make sure you set it to error, though.
//
// Thanks for listening~
public const int CurrentConfigVersion = 7;
public const int CurrentConfigVersion = 10;
#region Meta

View file

@ -8,10 +8,13 @@ public static class VersionHelper
{
static VersionHelper()
{
string commitNumber = "invalid";
try
{
CommitHash = ResourceHelper.ReadManifestFile("gitVersion.txt");
Branch = ResourceHelper.ReadManifestFile("gitBranch.txt");
commitNumber = $"{CommitHash}_{Build}";
FullRevision = (Branch == "main") ? $"r{commitNumber}" : $"{Branch}_r{commitNumber}";
string remotesFile = ResourceHelper.ReadManifestFile("gitRemotes.txt");
@ -54,7 +57,15 @@ public static class VersionHelper
public static string CommitHash { get; set; }
public static string Branch { get; set; }
public static string FullVersion => $"Project Lighthouse {Branch}@{CommitHash} {Build} ({ServerConfiguration.Instance.Customization.ServerName})";
/// <summary>
/// The full revision string. States current revision hash and, if not main, the branch.
/// </summary>
public static string FullRevision { get; set; }
/// <summary>
/// The server's branding (environment version) to show to LBP clients. Shows the environment name next to the revision.
/// </summary>
public static string EnvVer => $"{ServerConfiguration.Instance.Customization.EnvironmentName} {FullRevision}";
public static string FullVersion => $"Project Lighthouse {ServerConfiguration.Instance.Customization.EnvironmentName} {Branch}@{CommitHash} {Build}";
public static bool IsDirty => CommitHash.EndsWith("-dirty") || CommitsOutOfDate != 1 || CommitHash == "invalid" || Branch == "invalid";
public static int CommitsOutOfDate { get; set; }
public static bool CanCheckForUpdates { get; set; }

View file

@ -1,3 +1,4 @@
using System;
using System.Threading.Tasks;
using Discord;
using Discord.Webhook;
@ -7,18 +8,45 @@ namespace LBPUnion.ProjectLighthouse.Helpers;
public static class WebhookHelper
{
private static readonly DiscordWebhookClient client = (ServerConfiguration.Instance.DiscordIntegration.DiscordIntegrationEnabled
/// <summary>
/// The destination of the webhook post.
/// </summary>
public enum WebhookDestination : byte
{
/// <summary>
/// A channel intended for public viewing; where new levels and photos are sent.
/// </summary>
Public,
/// <summary>
/// A channel intended for moderators; where grief reports are sent.
/// </summary>
Moderation,
}
private static readonly DiscordWebhookClient publicClient = (ServerConfiguration.Instance.DiscordIntegration.DiscordIntegrationEnabled
? new DiscordWebhookClient(ServerConfiguration.Instance.DiscordIntegration.Url)
: null);
private static readonly DiscordWebhookClient moderationClient = (ServerConfiguration.Instance.DiscordIntegration.DiscordIntegrationEnabled
? new DiscordWebhookClient(ServerConfiguration.Instance.DiscordIntegration.ModerationUrl)
: null);
public static readonly Color UnionColor = new(0, 140, 255);
public static Task SendWebhook(EmbedBuilder builder) => SendWebhook(builder.Build());
public static Task SendWebhook(EmbedBuilder builder, WebhookDestination dest = WebhookDestination.Public)
=> SendWebhook(builder.Build(), dest);
public static async Task SendWebhook(Embed embed)
public static async Task SendWebhook(Embed embed, WebhookDestination dest = WebhookDestination.Public)
{
if (!ServerConfiguration.Instance.DiscordIntegration.DiscordIntegrationEnabled) return;
DiscordWebhookClient client = dest switch
{
WebhookDestination.Public => publicClient,
WebhookDestination.Moderation => moderationClient,
_ => throw new ArgumentOutOfRangeException(nameof(dest), dest, null),
};
await client.SendMessageAsync
(
embeds: new[]
@ -28,7 +56,7 @@ public static class WebhookHelper
);
}
public static Task SendWebhook(string title, string description)
public static Task SendWebhook(string title, string description, WebhookDestination dest = WebhookDestination.Public)
=> SendWebhook
(
new EmbedBuilder
@ -36,6 +64,7 @@ public static class WebhookHelper
Title = title,
Description = description,
Color = UnionColor,
}
},
dest
);
}

View file

@ -1,6 +1,8 @@
#nullable enable
using System.Linq;
using LBPUnion.ProjectLighthouse.Helpers;
using LBPUnion.ProjectLighthouse.Localization;
using LBPUnion.ProjectLighthouse.Localization.StringLists;
using LBPUnion.ProjectLighthouse.Match.Rooms;
namespace LBPUnion.ProjectLighthouse.PlayerData.Profiles;
@ -34,15 +36,17 @@ public class UserStatus
this.CurrentRoom = RoomHelper.FindRoomByUserId(userId);
}
public override string ToString()
public string ToTranslatedString(string language)
{
this.CurrentVersion ??= GameVersion.Unknown;
this.CurrentPlatform ??= Platform.Unknown;
return this.StatusType switch
{
StatusType.Online => $"Currently online on {((GameVersion)this.CurrentVersion).ToPrettyString()} on {((Platform)this.CurrentPlatform)}",
StatusType.Offline => "Offline",
_ => "Unknown",
StatusType.Online => StatusStrings.CurrentlyOnline.Translate(language,
((GameVersion)this.CurrentVersion).ToPrettyString(), ((Platform)this.CurrentPlatform)),
StatusType.Offline => StatusStrings.Offline.Translate(language),
_ => GeneralStrings.Unknown.Translate(language),
};
}
}

View file

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<TargetFramework>net6.0</TargetFramework>