This commit is contained in:
Toru the Red Fox 2022-07-27 15:45:23 +01:00
commit 04f34eaccc
101 changed files with 3954 additions and 279 deletions

View file

@ -14,6 +14,7 @@
<Path>ProjectLighthouse.sln.DotSettings.user</Path>
<Path>README.md</Path>
<Path>create-migration.sh</Path>
<Path>crowdin.yml</Path>
<Path>docker-compose.yml</Path>
<Path>global.json</Path>
<Path>scripts-and-tools</Path>

View file

@ -17,9 +17,6 @@ Once you've gotten MySQL running you can run Lighthouse. It will take care of th
PS3 is difficult to set up, so I will be going over how to set up RPCS3 instead. A guide will be coming for PS3 closer
to release. You can also follow this guide if you want to learn how to modify your EBOOT.
*Note: This requires a patched copy of RPCS3. You can find a working
version [on our GitHub](https://github.com/LBPUnion/rpcs3).*
Start by getting a copy of LittleBigPlanet 1/2 installed. (Check the LittleBigPlanet 1 section, since you'll need to do
extra steps for your game to not crash upon entering pod computer).
@ -44,8 +41,8 @@ Now, copy the `EBOOTlocalhost.elf` file to where you got your `EBOOT.elf` file f
To launch the game with the patched EBOOT, open up RPCS3, go to File, Boot SELF/ELF, and open up `EBOOTlocalhost.elf`.
Assuming you are running the patched version of RPCS3, you patched the file correctly, the database is migrated, and
Project Lighthouse is running, the game should now connect and you may begin contributing!
Assuming you patched the file correctly, the database is migrated, and
Project Lighthouse is running, the game should now connect, and you may begin contributing!
### LittleBigPlanet 1

View file

@ -0,0 +1,66 @@
<?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>Home</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>
<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>
<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>
<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>
<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>
<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>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>Forside</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Brugere</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>Baner</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>Godkendelse</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>Log ind / Registrer</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>Administrationspanel</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 ud</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>Home</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>
<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>
<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>
<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>
<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>
<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>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>Hejmo</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Uzantoj</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Fotoj</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>Etaĝoj</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>Aŭtentigado</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>Ensaluto / Registro</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">
<value>Profilo</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>Panelo de administranto</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Adiaŭi</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>Inicio</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Usuarios</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>Niveles</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>Autenticación</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>Iniciar sesión / Registrarse</value>
<comment>A button on the header that lets you log in or register.</comment>
</data>
<data name="header_profile" xml:space="preserve">
<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>Panel de administración</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Cerrar sesión</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>Home</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>
<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>
<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>
<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>
<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>
<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>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>Home</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>
<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>
<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>
<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>
<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>
<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>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>Home</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>
<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>
<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>
<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>
<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>
<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>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>Home</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>
<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>
<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>
<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>
<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>
<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>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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

@ -0,0 +1,66 @@
<?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>Hjem</value>
<comment>A button on the header that takes you to the landing page.</comment>
</data>
<data name="header_users" xml:space="preserve">
<value>Brukere</value>
<comment>A button on the header that takes you to the user listing.</comment>
</data>
<data name="header_photos" xml:space="preserve">
<value>Bilder</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>Nivåer</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>Godkjenning</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>Logg inn/Registrer</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>Administrasjon</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Logg ut</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>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>
</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>Panel Administracyjny</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Wyloguj</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>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>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>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>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>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>Fazer login ou registrar-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>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>Painel do administrador</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Fechar sessão</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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

@ -0,0 +1,66 @@
<?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>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>
</data>
<data name="header_profile" xml:space="preserve">
<value>Min 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>Administrationspanel</value>
<comment>A header link that takes you to the admin panel if available.</comment>
</data>
<data name="header_logout" xml:space="preserve">
<value>Logga ut</value>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,66 @@
<?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>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>
<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>
<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>
<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>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,68 @@
<?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="header_home" xml:space="preserve">
<value>Home</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>
<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>
<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>
<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>
<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>
<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>
<comment>A shortcut to log you out of your account.</comment>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Username</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot 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>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Brugernavn</value>
</data>
<data name="password" xml:space="preserve">
<value>Adgangskode</value>
</data>
<data name="register" xml:space="preserve">
<value>Registrer</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Glemt adgangskode?</value>
</data>
<data name="error" xml:space="preserve">
<value>Åh nej!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Log ind</value>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Username</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot 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>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Username</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot 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>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Username</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot 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>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Username</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot 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>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Username</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot 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>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Username</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot 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>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>
</root>

View file

@ -0,0 +1,38 @@
<?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>Brukernavn</value>
</data>
<data name="password" xml:space="preserve">
<value>Passord</value>
</data>
<data name="register" xml:space="preserve">
<value>Registrer</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Glemt Passord?</value>
</data>
<data name="error" xml:space="preserve">
<value>Ånei!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Logg in</value>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Username</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot 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>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Nome do utilizador</value>
</data>
<data name="password" xml:space="preserve">
<value>Palavra-chave</value>
</data>
<data name="register" xml:space="preserve">
<value>Cadastrar</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Esqueceu a palavra-passe?</value>
</data>
<data name="error" xml:space="preserve">
<value>Essa não!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Iniciar Sessão</value>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>
</root>

View file

@ -0,0 +1,38 @@
<?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>Användarnamn</value>
</data>
<data name="password" xml:space="preserve">
<value>Lösenord</value>
</data>
<data name="register" xml:space="preserve">
<value>Registrera</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Glömt lösenordet?</value>
</data>
<data name="error" xml:space="preserve">
<value>Ajdå!</value>
</data>
<data name="log_in" xml:space="preserve">
<value>Logga in</value>
</data>
</root>

View file

@ -0,0 +1,38 @@
<?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>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</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>
</root>

View file

@ -0,0 +1,39 @@
<?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="username" xml:space="preserve">
<value>Username</value>
</data>
<data name="password" xml:space="preserve">
<value>Password</value>
</data>
<data name="register" xml:space="preserve">
<value>Register</value>
</data>
<data name="forgot_password" xml:space="preserve">
<value>Forgot 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>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {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>
<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>
<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>
<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>
<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>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Velkommen til {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>Du er i øjeblikket logget ind som {0}.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>Der er ingen brugere online. Hvorfor ikke hoppe på?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>Der er 1 bruger online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>Der er {0} brugere online:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>Du har {0} godkendelsesforsøg afventende. Klik her for at se dem.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Seneste Baner</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Seneste Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {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>
<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>
<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>
<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>
<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>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>Vi ensalutinta kiel {0}.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>Ne estas uzantoj enretaj. Kial ne sursalti?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>Estas 1 uzanto enreta:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>Estas {0} uzantoj enretaj:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>Vi havas {0} pritraktatajn aŭtentigajn provojn. Klaku ĉi tie por vidi ilin.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>Estás conectado actualmente como {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>No hay usuarios en línea. ¿Por qué no subirse?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>Hay 1 usuario actualmente en línea:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>Actualmente hay {0} usuarios en línea:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>Tiene {0} intentos de autenticación pendientes. Haga clic aquí para verlos.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {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>
<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>
<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>
<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>
<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>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {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>
<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>
<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>
<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>
<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>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {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>
<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>
<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>
<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>
<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>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {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>
<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>
<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>
<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>
<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>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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

@ -0,0 +1,62 @@
<?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>Velkommen til {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>Du er logget inn som {0}</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<value>Det er ingen brukere på. Hvorfor ikke hoppe på?</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_single" xml:space="preserve">
<value>Det er 1 bruker på for øyeblikket:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_multiple" xml:space="preserve">
<value>For tiden er {0} brukere pålogget:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<value>Du har {0} autentiseringsforsøk. Klikk her for å se dem.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Nyeste nivåer</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Siste lag valg</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {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>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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>Bem-vindo ao {0}!</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="loggedInAs" xml:space="preserve">
<value>Você está logado como {0}.</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="users_none" xml:space="preserve">
<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>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>Atualmente, existem {0} utilizadores ligado:</value>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="authAttemptsPending" xml:space="preserve">
<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>Níveis novos</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Escolhas mais recentes da equipa</value>
</data>
</root>

View file

@ -0,0 +1,62 @@
<?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

@ -0,0 +1,62 @@
<?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>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>
</root>

View file

@ -0,0 +1,62 @@
<?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>Welcome to {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>
<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>
<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>
<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>
<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>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,64 @@
<?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="welcome" xml:space="preserve">
<value>Welcome to {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>
<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>
<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>
<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>
<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>
<comment>A greeting on the main page of the website.</comment>
</data>
<data name="newest_levels" xml:space="preserve">
<value>Newest Levels</value>
</data>
<data name="latest_team_picks" xml:space="preserve">
<value>Latest Team Picks</value>
</data>
</root>

View file

@ -0,0 +1,126 @@
using System.Diagnostics;
using System.Reflection;
using System.Resources;
namespace LBPUnion.ProjectLighthouse.Localization;
public static class LocalizationManager
{
private static readonly string namespaceStr = typeof(LocalizationManager).Namespace ?? "";
public const string DefaultLang = "en-US";
public static string GetLocalizedString(TranslationAreas translationArea, string language, string key)
{
// ASP.NET requires specific names for certain languages (like ja for japanese as opposed to the standard ja-JP)
// We map that value back here.
language = mapLanguageBack(language);
#if DEBUG
Console.WriteLine($"Attempting to load '{key}' for '{language}'");
#endif
string resourceBasename = $"{namespaceStr}.{translationArea.ToString()}";
// We don't have an en-US .resx, so if we aren't using en-US then we need to add the appropriate language.
// Otherwise, keep it to the normal .resx file
// e.g. BaseLayout.resx as opposed to BaseLayout.lang-da-DK.resx.
if (language != DefaultLang) resourceBasename += $".lang-{language}";
string? localizedString = null;
try
{
ResourceManager resourceManager = new(resourceBasename,
Assembly.GetExecutingAssembly());
localizedString = resourceManager.GetString(key);
}
catch
{
// ignored
}
if (localizedString == null)
{
#if DEBUG
if (Debugger.IsAttached) Debugger.Break();
#endif
return $"{translationArea.ToString()}.{language}.{key}";
}
return localizedString;
}
// If a language isn't working, it might be because a language is using a different name than what ASP.NET expects.
// You can retrieve the name of the language from the <c>Accept-Language</c> header in an HTTP request.
private static readonly Dictionary<string, string> languageMappings = new()
{
{
"ja-JP", "ja"
},
{
"eo-UY", "eo"
},
{
"ru-RU", "ru"
},
{
"pt-PT", "pt"
},
{
"no-NO", "no"
},
{
"pl-PL", "pl"
},
{
"fr-FR", "fr"
},
{
"de-DE", "de"
}
};
/// <summary>
/// Some languages crowdin uses have names that differ from the ones that ASP.NET expects. This function converts the names.
/// </summary>
/// <param name="language">The language to convert to ASP.NET names</param>
/// <returns>The name of the language that ASP.NET expects.</returns>
public static string MapLanguage(string language)
{
foreach ((string? key, string? value) in languageMappings)
{
if (key == language) return value;
}
return language;
}
private static string mapLanguageBack(string language)
{
foreach ((string? key, string? value) in languageMappings)
{
if (value == language) return key;
}
return language;
}
// This is a bit scuffed, but it will work for what I need it to do.
public static IEnumerable<string> GetAvailableLanguages()
{
string area = TranslationAreas.BaseLayout.ToString();
List<string> languages = Assembly.GetExecutingAssembly()
.GetManifestResourceNames()
.Where(r => r.StartsWith($"{namespaceStr}.{area}"))
.Select(r => r.Substring(r.IndexOf(area), r.Length - r.IndexOf(area)).Substring(area.Length + 1))
.Select(r => r.Replace(".resources", string.Empty)) // Remove .resources
.Select(r => r.Replace("lang-", string.Empty)) // Remove 'lang-' prefix from languages
.Where(r => r != "resources")
.ToList();
languages.Add(DefaultLang);
return languages;
}
}

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>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</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>Logget ud</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>Du er blevet logget ud. Du vil blive omdirigeret om 5 sekunder, eller du kan klikke nedenfor for at gøre det manuelt.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Omdiriger</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>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</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>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</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>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</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>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</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>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</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>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</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

@ -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>Logget ut</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>Du har blitt logget ut. Du vil bli omdirigert om 5 sekunder, eller du kan klikke nedenfor for å gjøre det manuelt.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Videresend</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>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</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>Sessão encerrada</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<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>Redirecionar</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

@ -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>Utloggad</value>
</data>
<data name="logged_out_info" xml:space="preserve">
<value>Du har loggat ut. Om 5 sekunder kommer du bli omderigerad, eller kan du klicka på knappen under, manuellt.</value>
</data>
<data name="redirect" xml:space="preserve">
<value>Omdirigera</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>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</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="logged_out" xml:space="preserve">
<value>Logged 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>
</data>
<data name="redirect" xml:space="preserve">
<value>Redirect</value>
</data>
</root>

View file

@ -0,0 +1,22 @@
using System.Reflection;
namespace LBPUnion.ProjectLighthouse.Localization;
public static class Program
{
public static void Main()
{
Console.WriteLine("Resource files loaded:");
foreach (string resourceFile in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
Console.WriteLine(" " + resourceFile);
}
Console.Write('\n');
foreach (string language in LocalizationManager.GetAvailableLanguages())
{
Console.WriteLine(LocalizationManager.GetLocalizedString(TranslationAreas.BaseLayout, language, "header_home"));
}
}
}

View file

@ -0,0 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>LBPUnion.ProjectLighthouse.Localization</RootNamespace>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Update="LandingPage.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>LandingPage.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="General.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>General.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="LoggedOut.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>LoggedOut.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

View file

@ -0,0 +1,17 @@
namespace LBPUnion.ProjectLighthouse.Localization.StringLists;
public static class BaseLayoutStrings
{
public static readonly TranslatableString HeaderHome = create("header_home");
public static readonly TranslatableString HeaderUsers = create("header_users");
public static readonly TranslatableString HeaderPhotos = create("header_photos");
public static readonly TranslatableString HeaderSlots = create("header_slots");
public static readonly TranslatableString HeaderAuthentication = create("header_authentication");
public static readonly TranslatableString HeaderLoginRegister = create("header_loginRegister");
public static readonly TranslatableString HeaderProfile = create("header_profile");
public static readonly TranslatableString HeaderAdminPanel = create("header_adminPanel");
public static readonly TranslatableString HeaderLogout = create("header_logout");
private static TranslatableString create(string key) => new(TranslationAreas.BaseLayout, key);
}

View file

@ -0,0 +1,13 @@
namespace LBPUnion.ProjectLighthouse.Localization.StringLists;
public static class GeneralStrings
{
public static readonly TranslatableString Username = create("username");
public static readonly TranslatableString Password = create("password");
public static readonly TranslatableString Register = create("register");
public static readonly TranslatableString ForgotPassword = create("forgot_password");
public static readonly TranslatableString Error = create("error");
public static readonly TranslatableString LogIn = create("log_in");
private static TranslatableString create(string key) => new(TranslationAreas.General, key);
}

View file

@ -0,0 +1,18 @@
namespace LBPUnion.ProjectLighthouse.Localization.StringLists;
public static class LandingPageStrings
{
public static readonly TranslatableString Welcome = create("welcome");
public static readonly TranslatableString LoggedInAs = create("loggedInAs");
public static readonly TranslatableString UsersNone = create("users_none");
public static readonly TranslatableString UsersSingle = create("users_single");
public static readonly TranslatableString UsersMultiple = create("users_multiple");
public static readonly TranslatableString LatestTeamPicks = create("latest_team_picks");
public static readonly TranslatableString NewestLevels = create("newest_levels");
public static readonly TranslatableString AuthAttemptsPending = create("authAttemptsPending");
private static TranslatableString create(string key) => new(TranslationAreas.LandingPage, key);
}

View file

@ -0,0 +1,10 @@
namespace LBPUnion.ProjectLighthouse.Localization.StringLists;
public static class LoggedOutStrings
{
public static readonly TranslatableString LoggedOut = create("logged_out");
public static readonly TranslatableString LoggedOutInfo = create("logged_out_info");
public static readonly TranslatableString Redirect = create("redirect");
private static TranslatableString create(string key) => new(TranslationAreas.LoggedOut, key);
}

View file

@ -0,0 +1,27 @@
namespace LBPUnion.ProjectLighthouse.Localization;
public class TranslatableString
{
public TranslatableString(TranslationAreas area, string key)
{
this.Key = key;
this.Area = area;
}
public string Key { get; init; }
public TranslationAreas Area { get; init; }
public string Translate(string language) => LocalizationManager.GetLocalizedString(this.Area, language, this.Key);
public string Translate(string language, params object?[] format) => string.Format(LocalizationManager.GetLocalizedString(this.Area, language, this.Key), format);
// CS0809 is a warning about obsolete methods overriding non-obsoleted methods.
// That works against what we're trying to do here, so we disable the warning here.
#pragma warning disable CS0809
[Obsolete("Do not translate by using ToString. Use TranslatableString.Translate().", true)]
public override string ToString() => "NOT TRANSLATED CORRECTLY!";
#pragma warning restore CS0809
[Obsolete("Do not translate by using ToString. Use TranslatableString.Translate().", true)]
public static implicit operator string(TranslatableString _) => "NOT TRANSLATED CORRECTLY!";
}

View file

@ -0,0 +1,9 @@
namespace LBPUnion.ProjectLighthouse.Localization;
public enum TranslationAreas
{
BaseLayout,
LandingPage,
General,
LoggedOut,
}

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

@ -3,6 +3,7 @@
@using LBPUnion.ProjectLighthouse.Extensions
@using LBPUnion.ProjectLighthouse.PlayerData.Profiles
@using LBPUnion.ProjectLighthouse.Levels
@using LBPUnion.ProjectLighthouse.Localization.StringLists
@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.LandingPage
@{
@ -10,22 +11,22 @@
Model.ShowTitleInPage = false;
bool isMobile = this.Request.IsMobile();
}
<h1>Welcome to <b>@ServerConfiguration.Instance.Customization.ServerName</b>!</h1>
<h1>@Model.Translate(LandingPageStrings.Welcome, ServerConfiguration.Instance.Customization.ServerName)</h1>
@if (Model.User != null)
{
<p>You are currently logged in as <b>@Model.User.Username</b>.</p>
if (ServerConfiguration.Instance.Authentication.UseExternalAuth && Model.AuthenticationAttemptsCount > 0)
<p>@Model.Translate(LandingPageStrings.LoggedInAs, Model.User.Username)</p>
if (ServerConfiguration.Instance.Authentication.UseExternalAuth && Model.PendingAuthAttempts > 0)
{
<p>
<b>You have @Model.AuthenticationAttemptsCount authentication attempts pending. Click <a href="/authentication">here</a> to view them.</b>
<b><a href="/authentication">@Model.Translate(LandingPageStrings.AuthAttemptsPending, Model.PendingAuthAttempts)</a></b>
</p>
}
}
@if (Model.PlayersOnlineCount == 1)
{
<p>There is 1 user currently online:</p>
<p>@Model.Translate(LandingPageStrings.UsersSingle)</p>
@foreach (User user in Model.PlayersOnline)
{
<a href="/user/@user.UserId" title="@user.Status.ToString()">@user.Username</a>
@ -34,11 +35,11 @@
else if (Model.PlayersOnlineCount == 0)
{
<p>There are no users online. Why not hop on?</p>
<p>@Model.Translate(LandingPageStrings.UsersNone)</p>
}
else
{
<p>There are currently @Model.PlayersOnlineCount users online:</p>
<p>@Model.Translate(LandingPageStrings.UsersMultiple, Model.PlayersOnlineCount)</p>
@foreach (User user in Model.PlayersOnline)
{
<a href="/user/@user.UserId" title="@user.Status.ToString()">@user.Username</a>
@ -50,7 +51,7 @@ else
<div class="@(isMobile ? "" : "ui center aligned grid")">
<div class="eight wide column">
<div class="ui pink segment">
<h1><i class="ribbon icon"></i>Latest Team Picks</h1>
<h1><i class="ribbon icon"></i>@Model.Translate(LandingPageStrings.LatestTeamPicks)</h1>
<div class="ui divider"></div>
<div class="ui left aligned segment">
@foreach (Slot slot in Model.LatestTeamPicks!) @* Can't reach a point where this is null *@
@ -67,7 +68,7 @@ else
}
<div class="eight wide column">
<div class="ui blue segment">
<h1><i class="certificate icon"></i>Newest Levels</h1>
<h1><i class="certificate icon"></i>@Model.Translate(LandingPageStrings.NewestLevels)</h1>
<div class="ui divider"></div>
<div class="ui left aligned segment">
@foreach (Slot slot in Model.NewestLevels!) @* Can't reach a point where this is null *@

View file

@ -15,7 +15,7 @@ public class LandingPage : BaseLayout
public LandingPage(Database database) : base(database)
{}
public int AuthenticationAttemptsCount;
public int PendingAuthAttempts;
public List<User> PlayersOnline = new();
public int PlayersOnlineCount;
@ -32,7 +32,7 @@ public class LandingPage : BaseLayout
this.PlayersOnlineCount = await StatisticsHelper.RecentMatches();
if (user != null)
this.AuthenticationAttemptsCount = await this.Database.AuthenticationAttempts.Include
this.PendingAuthAttempts = await this.Database.AuthenticationAttempts.Include
(a => a.GameToken)
.CountAsync(a => a.GameToken.UserId == user.UserId);

View file

@ -1,27 +1,28 @@
@using LBPUnion.ProjectLighthouse.Configuration
@using LBPUnion.ProjectLighthouse.Extensions
@using LBPUnion.ProjectLighthouse.Helpers
@using LBPUnion.ProjectLighthouse.Localization.StringLists
@using LBPUnion.ProjectLighthouse.Types
@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts.BaseLayout
@{
if (Model!.User == null)
{
Model.NavigationItemsRight.Add(new PageNavigationItem("Login / Register", "/login", "sign in"));
Model.NavigationItemsRight.Add(new PageNavigationItem(BaseLayoutStrings.HeaderLoginRegister, "/login", "sign in"));
}
else
{
if (ServerConfiguration.Instance.Authentication.UseExternalAuth)
{
Model.NavigationItems.Add(new PageNavigationItem("Authentication", "/authentication", "key"));
Model.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderAuthentication, "/authentication", "key"));
}
Model.NavigationItemsRight.Add(new PageNavigationItem("Profile", "/user/" + Model.User.UserId, "user alternate"));
Model.NavigationItemsRight.Add(new PageNavigationItem(BaseLayoutStrings.HeaderProfile, "/user/" + Model.User.UserId, "user alternate"));
@if (Model.User.IsAdmin)
{
Model.NavigationItemsRight.Add(new PageNavigationItem("Admin Panel", "/admin", "cogs"));
Model.NavigationItemsRight.Add(new PageNavigationItem(BaseLayoutStrings.HeaderAdminPanel, "/admin", "cogs"));
}
Model.NavigationItemsRight.Add(new PageNavigationItem("Log out", "/logout", "user alternate slash")); // should always be last
Model.NavigationItemsRight.Add(new PageNavigationItem(BaseLayoutStrings.HeaderLogout, "/logout", "user alternate slash")); // should always be last
}
Model.IsMobile = Model.Request.IsMobile();
@ -95,7 +96,7 @@
@if (!Model.IsMobile)
{
@navigationItem.Name
@Model.Translate(navigationItem.Name)
}
</a>
}
@ -110,7 +111,7 @@
@if (!Model.IsMobile)
{
@navigationItem.Name
@Model.Translate(navigationItem.Name)
}
</a>
}

View file

@ -1,22 +1,21 @@
#nullable enable
using System;
using System.Collections.Generic;
using LBPUnion.ProjectLighthouse.Configuration;
using LBPUnion.ProjectLighthouse.Localization;
using LBPUnion.ProjectLighthouse.Localization.StringLists;
using LBPUnion.ProjectLighthouse.PlayerData.Profiles;
using LBPUnion.ProjectLighthouse.Types;
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts;
public class BaseLayout : PageModel
{
public readonly Database Database;
public readonly List<PageNavigationItem> NavigationItems = new()
{
new PageNavigationItem("Home", "/", "home"),
new PageNavigationItem("Users", "/users/0", "user friends"),
new PageNavigationItem("Photos", "/photos/0", "camera"),
new PageNavigationItem("Levels", "/slots/0", "certificate"),
};
public readonly List<PageNavigationItem> NavigationItems = new();
public readonly List<PageNavigationItem> NavigationItemsRight = new();
public string Description = string.Empty;
@ -31,6 +30,11 @@ public class BaseLayout : PageModel
public BaseLayout(Database database)
{
this.Database = database;
this.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderHome, "/", "home"));
this.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderUsers, "/users/0", "user friends"));
this.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderPhotos, "/photos/0", "camera"));
this.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderSlots, "/slots/0", "certificate"));
}
public new User? User {
@ -41,4 +45,17 @@ public class BaseLayout : PageModel
}
set => this.user = value;
}
private string getLanguage()
{
if (ServerStatics.IsUnitTesting) return "en-US";
IRequestCultureFeature? requestCulture = Request.HttpContext.Features.Get<IRequestCultureFeature>();
if (requestCulture == null) return LocalizationManager.DefaultLang;
return 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);
}

View file

@ -1,10 +1,11 @@
@page "/login"
@using LBPUnion.ProjectLighthouse.Configuration
@using LBPUnion.ProjectLighthouse.Localization.StringLists
@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.LoginForm
@{
Layout = "Layouts/BaseLayout";
Model.Title = "Log in";
Model.Title = Model.Translate(GeneralStrings.LogIn);
}
<script src="https://geraintluff.github.io/sha256/sha256.min.js"></script>
@ -29,7 +30,7 @@
{
<div class="ui negative message">
<div class="header">
Uh oh!
@Model.Translate(GeneralStrings.Error)
</div>
<p style="white-space: pre-line">@Model.Error</p>
</div>
@ -40,17 +41,17 @@
<input type="hidden" id="redirect" name="redirect">
<div class="field">
<label>Username</label>
<label>@Model.Translate(GeneralStrings.Username)</label>
<div class="ui left icon input">
<input type="text" name="username" id="text" placeholder="Username">
<input type="text" name="username" id="text" placeholder="@Model.Translate(GeneralStrings.Username)">
<i class="user icon"></i>
</div>
</div>
<div class="field">
<label>Password</label>
<label>@Model.Translate(GeneralStrings.Password)</label>
<div class="ui left icon input">
<input type="password" id="password" placeholder="Password">
<input type="password" id="password" placeholder="@Model.Translate(GeneralStrings.Password)">
<input type="hidden" id="password-submit" name="password">
<i class="lock icon"></i>
</div>
@ -62,13 +63,13 @@
}
<div class="row">
<input type="submit" value="Log in" id="submit" class="ui blue button">
<input type="submit" value="@Model.Translate(GeneralStrings.LogIn)" id="submit" class="ui blue button">
@if (ServerConfiguration.Instance.Authentication.RegistrationEnabled)
{
<a href="/register">
<div class="ui button">
<i class="user alternate add icon"></i>
Register
@Model.Translate(GeneralStrings.Register)
</div>
</a>
}
@ -76,7 +77,7 @@
<br/>
<a href="/passwordResetRequest">
<div class="ui button">
Forgot Password?
@Model.Translate(GeneralStrings.ForgotPassword)
</div>
</a>
</form>

View file

@ -1,10 +1,16 @@
@page "/logout"
@using LBPUnion.ProjectLighthouse.Localization.StringLists
@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.LogoutPage
@{
Layout = "Layouts/BaseLayout";
Model.Title = "Logged out";
Model.Title = Model.Translate(LoggedOutStrings.LoggedOut);
}
<p>You have been successfully logged out. You will be redirected in 5 seconds, or you may click <a href="/">here</a> to do so manually.</p>
<p>@Model.Translate(LoggedOutStrings.LoggedOutInfo)</p>
<a href="/" class="ui blue button">
@Model.Translate(LoggedOutStrings.Redirect)
</a>
<meta http-equiv="refresh" content="5; url=/"/>

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

@ -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

@ -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>
}
<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="/admin/report/@report.ReportId/dismiss">
<i class="checkmark icon"></i>
<span>Dismiss</span>
</a>
<a class="ui red small button" href="/admin/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>
@await Html.PartialAsync("Partials/ReportPartial", report)
}
<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

@ -10,6 +10,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ProjectLighthouse.Localization\ProjectLighthouse.Localization.csproj" />
<ProjectReference Include="..\ProjectLighthouse\ProjectLighthouse.csproj" />
</ItemGroup>

View file

@ -1,5 +1,8 @@
using System.Globalization;
using LBPUnion.ProjectLighthouse.Localization;
using LBPUnion.ProjectLighthouse.Middlewares;
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.AspNetCore.Localization;
#if !DEBUG
using Microsoft.Extensions.Hosting.Internal;
@ -38,6 +41,16 @@ public class WebsiteStartup
}
);
services.Configure<RequestLocalizationOptions>(config =>
{
List<CultureInfo> languages = LocalizationManager.GetAvailableLanguages().Select(l => new CultureInfo(LocalizationManager.MapLanguage(l))).ToList();
config.DefaultRequestCulture = new RequestCulture(new CultureInfo("en-US"));
config.SupportedCultures = languages;
config.SupportedUICultures = languages;
});
#if DEBUG
services.AddSingleton<IHostLifetime, DebugWarmupLifetime>();
#else
@ -63,6 +76,8 @@ public class WebsiteStartup
ServeUnknownFileTypes = true,
});
app.UseRequestLocalization();
app.UseEndpoints(endpoints => endpoints.MapControllers());
app.UseEndpoints(endpoints => endpoints.MapRazorPages());
}

View file

@ -78,7 +78,7 @@ public class AuthenticationTests : LighthouseWebTest
[DatabaseFact]
public async Task ShouldLoginWithInjectedCookie()
{
const string loggedInAsUsernameTextXPath = "/html/body/div/div/div/p[1]/b";
const string loggedInAsUsernameTextXPath = "/html/body/div/div/div/p[1]";
await using Database database = new();
Random random = new();
@ -96,10 +96,10 @@ public class AuthenticationTests : LighthouseWebTest
INavigation navigation = this.Driver.Navigate();
navigation.GoToUrl(this.BaseAddress + "/");
Assert.DoesNotContain(user.Username, this.Driver.FindElement(By.XPath(loggedInAsUsernameTextXPath)).Text);
this.Driver.Manage().Cookies.AddCookie(new Cookie("LighthouseToken", webToken.UserToken));
Assert.Throws<NoSuchElementException>(() => this.Driver.FindElement(By.XPath(loggedInAsUsernameTextXPath)));
navigation.Refresh();
Assert.True(this.Driver.FindElement(By.XPath(loggedInAsUsernameTextXPath)).Text == user.Username);
Assert.Contains(user.Username, this.Driver.FindElement(By.XPath(loggedInAsUsernameTextXPath)).Text);
await database.RemoveUser(user);
}

View file

@ -20,6 +20,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Servers", "Servers", "{1DE7
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Source Code", "Source Code", "{7805B410-9260-4907-A7C6-D739369B2F25}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectLighthouse.Localization", "ProjectLighthouse.Localization\ProjectLighthouse.Localization.csproj", "{18B76DAC-5DCB-44EA-B74D-0B4554BB161C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -51,6 +53,10 @@ Global
{FA9AEA06-D6B5-4E68-8370-DB9188108635}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA9AEA06-D6B5-4E68-8370-DB9188108635}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA9AEA06-D6B5-4E68-8370-DB9188108635}.Release|Any CPU.Build.0 = Release|Any CPU
{18B76DAC-5DCB-44EA-B74D-0B4554BB161C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{18B76DAC-5DCB-44EA-B74D-0B4554BB161C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{18B76DAC-5DCB-44EA-B74D-0B4554BB161C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{18B76DAC-5DCB-44EA-B74D-0B4554BB161C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{AFC74569-B289-4ACC-B21C-313A3A62C017} = {D360C08E-EA47-43AC-A566-FDF413442980}
@ -61,5 +67,6 @@ Global
{FA9AEA06-D6B5-4E68-8370-DB9188108635} = {1DE7A758-1F4F-4BA5-BE1C-74F9D0AB9EA3}
{1DE7A758-1F4F-4BA5-BE1C-74F9D0AB9EA3} = {7805B410-9260-4907-A7C6-D739369B2F25}
{C6CFD4AD-47ED-4C86-B0C4-A4216D82E0DC} = {7805B410-9260-4907-A7C6-D739369B2F25}
{18B76DAC-5DCB-44EA-B74D-0B4554BB161C} = {7805B410-9260-4907-A7C6-D739369B2F25}
EndGlobalSection
EndGlobal

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 = 8;
#region Meta

View file

@ -0,0 +1,4 @@
namespace LBPUnion.ProjectLighthouse.Helpers;
public static class LocalizationHelper
{}

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

@ -59,18 +59,7 @@
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<ProjectReference Include="..\ProjectLighthouse.Localization\ProjectLighthouse.Localization.csproj" />
</ItemGroup>
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">

View file

@ -1,16 +1,18 @@
using LBPUnion.ProjectLighthouse.Localization;
#nullable enable
namespace LBPUnion.ProjectLighthouse.Types;
public class PageNavigationItem
{
public PageNavigationItem(string name, string url, string? icon = null)
public PageNavigationItem(TranslatableString name, string url, string? icon = null)
{
this.Name = name;
this.Url = url;
this.Icon = icon;
}
public string Name { get; set; }
public TranslatableString Name { get; set; }
public string Url { get; set; }
public string? Icon { get; set; }
}

View file

@ -20,7 +20,7 @@ environment until release**.
This is because we have not entirely nailed security down yet, and **your instance WILL get attacked** as a result. It's
happened before, and it'll happen again.
Simply put, **Project Lighthouse is not ready for the general public yet**.
Simply put, **Project Lighthouse is not ready for the public yet**.
In addition, we're not responsible if someone hacks your machine and wipes your database, so make frequent backups, and
be sure to report any vulnerabilities. Thank you in advance.
@ -61,12 +61,12 @@ information.
## Compatibility across games and platforms
| Game | Console (PS3/Vita/PSP) | Emulator (RPCS3/Vita3k/PPSSPP) | Next-Gen (PS4/PS5/Vita) |
|----------|-------------------------------------|--------------------------------------------------------------|-------------------------|
| LBP1 | Compatible | Compatible with patched RPCS3 build | No next-gen equivalent |
| LBP2 | Compatible | Compatible with patched RPCS3 build | No next-gen equivalent |
| LBP3 | Mostly compatible, frequent crashes | Mostly compatible with patched RPCS3 build, frequent crashes | Incompatible |
| LBP Vita | Compatible | Incompatible, marked as "Intro" on Vita3k | No next-gen equivalent |
| LBP PSP | Potentially compatible | Incompatible, PSN not supported on PPSSPP | Potentially Compatible |
| Game | Console (PS3/Vita/PSP) | Emulator (RPCS3/Vita3k/PPSSPP) | Next-Gen (PS4/PS5/Adrenaline) |
|----------|------------------------|-------------------------------------------|-------------------------------|
| LBP1 | Compatible | Compatible | No next-gen equivalent |
| LBP2 | Compatible | Compatible | No next-gen equivalent |
| LBP3 | Mostly compatible | Mostly compatible | Incompatible |
| LBP Vita | Compatible | Incompatible, PSN not supported on Vita3k | No next-gen equivalent |
| LBP PSP | Potentially compatible | Incompatible, PSN not supported on PPSSPP | Potentially Compatible |
Project Lighthouse is mostly a work in progress, so this chart is subject to change at any point.

Some files were not shown because too many files have changed in this diff Show more