allow international letters

This commit is contained in:
Ben Kyd
2021-04-02 23:16:03 +01:00
parent 26702831b2
commit 96c2ea9c27
5 changed files with 130 additions and 79 deletions

110
server/locale.json Normal file
View File

@@ -0,0 +1,110 @@
{
"scrabble-name": {
"en": "Scrabble",
"es": "Scrabble",
"pt": "Scrabble"
},
"username": {
"en": "Username",
"es": "Nombre de usuario",
"pt": "Nome de usuàrio"
},
"button-singleplayer": {
"en": "Play singleplayer",
"es": "Jugar a un(a) jugador(a)",
"pt": "Jogar singleplayer"
},
"button-submit": {
"en": "Submit",
"es": "Enviar",
"pt": "Enviar"
},
"status-connected": {
"en": "Connected",
"es": "Conectado(a)",
"pt": "Conectado(a)"
},
"error-bold": {
"en": "ERROR",
"es": "ERRO",
"pt": "ERROR"
},
"error-no-username": {
"en": "Username not present",
"es": "Nombre de usuario no esta presente",
"pt": "Nome de usuário não esta presente"
},
"error-invalid-username": {
"en": "Invalid username",
"es": "Nombre de usuario no es válido",
"pt": "Nome de usuário Inválido"
},
"error-taken-username": {
"en": "Username taken",
"es": "Nombre de usuario no esta disponible",
"pt": "Nome de usuário já está em uso"
},
"error-too-many-clients": {
"en": "Too many connections",
"es": "Demasiadas conexiones",
"pt": "Demasiadas conexões"
},
"error-bad-intent": {
"en": "Client has no intent",
"es": "Cliente no tiene intención",
"pt": "Cliente não tem intenção"
},
"error-unknown-uid": {
"en": "Unknown user ID",
"es": "",
"pt": ""
},
"error-taken-user-connection": {
"en": "User already connected",
"es": "",
"pt": ""
},
"error-illegal-user": {
"en": "Illegal user",
"es": "",
"pt": ""
},
"error-malformed-lobby": {
"en": "Lobby malformed",
"es": "",
"pt": ""
},
"error-taken-lobby-ownership": {
"en": "User already owns lobby",
"es": "",
"pt": ""
},
"error-illegal-lobby": {
"en": "Illegal lobby",
"es": "",
"pt": ""
},
"error-cannot-join-lobby": {
"en": "Cannot join lobby",
"es": "",
"pt": ""
},
"error-lobby-not-exist": {
"en": "Lobby does not exist",
"es": "",
"pt": ""
},
"error-lobby-join": {
"en": "Cannot join lobby",
"es": "",
"pt": ""
},
"en": "",
"es": "",
"pt": ""
}

View File

@@ -56,7 +56,8 @@ function CountIPs(ip)
function ValidUsername(username)
{
if (username.match(/[^A-Za-z0-9_-]/))
// \p{L} includes international letters
if (username.match(/[^A-Za-z0-9_-]\p{L}/))
{
return false;
}
@@ -147,7 +148,7 @@ function GetUserbyConnection(connectionid)
// TODO: User intent
function UserConnect(useruid, connectionid)
{
if (OnlineUsers[useruid].state === 'CONNECTED') return 'User Already Connected';
if (OnlineUsers[useruid].state === 'CONNECTED') return 'error-taken-user-connection';
OnlineUsers[useruid].connectionid = connectionid;
OnlineUsers[useruid].state = 'CONNECTED';

View File

@@ -4,7 +4,7 @@ let locales = {};
function init()
{
locales = JSON.parse(FS.readFileSync('src/locale.json'));
locales = JSON.parse(FS.readFileSync('./locale.json'));
}
function GetLocaleListJSON()

View File

@@ -1,60 +0,0 @@
{
"scrabble-name": {
"en": "Scrabble",
"es": "Scrabble",
"pt": "Scrabble"
},
"username": {
"en": "Username",
"es": "Nombre de usuario",
"pt": "Nome de usuàrio"
},
"button-singleplayer": {
"en": "Play singleplayer",
"es": "Jugar a un(a) jugador(a)",
"pt": "Jogar singleplayer"
},
"button-submit": {
"en": "Submit",
"es": "Enviar",
"pt": "Enviar"
},
"status-connected": {
"en": "Connected",
"es": "",
"pt": ""
},
"error-bold": {
"en": "ERROR",
"es": "ERRO",
"pt": "ERROR"
},
"error-no-username": {
"en": "Username not present",
"es": "",
"pt": ""
},
"error-invalid-username": {
"en": "Invalid username",
"es": "",
"pt": ""
},
"error-taken-username": {
"en": "Username taken",
"es": "",
"pt": ""
},
"error-too-many-clients": {
"en": "Too many clients",
"es": "",
"pt": ""
},
"en": "",
"es": "",
"pt": ""
}

View File

@@ -67,14 +67,14 @@ function ClientIdentify(socket, args)
if (!intent)
{
err.addError(400, 'Bad Request', 'Client has no intent');
err.addError(400, 'Bad Request', 'error-bad-intent');
socket.emit('identify-error', err.toError);
return;
}
if (!user)
{
err.addError(400, 'Bad Request', 'Unknown uid');
err.addError(400, 'Bad Request', 'error-unknown-uid');
socket.emit('identify-error', err.toError);
return;
}
@@ -88,14 +88,14 @@ function ClientIdentify(socket, args)
socket.emit('identify-success', {connected: true, user: user});
return;
}
else if (status === 'User Already Connected')
else if (status === 'error-taken-user-connection')
{
err.addError(500, 'Internal Server Error', 'User already connected');
err.addError(500, 'Internal Server Error', 'error-taken-user-connection');
socket.emit('identify-error', err.toError);
return;
} else
{
err.addError(500, 'Internal Server Error', 'Illegal user');
err.addError(500, 'Internal Server Error', 'error-illegal-user');
socket.emit('identify-error', err.toError);
return;
}
@@ -125,7 +125,7 @@ function LobbyCreate(socket, args)
const user = Game.Registrar.GetUserbyConnection(socket.id);
if (!user || user.uid != useruid)
{
err.addError(403, 'Forbidden', 'Illegal user');
err.addError(403, 'Forbidden', 'error-illegal-user');
socket.emit('lobby-create-error', err.toError);
return;
}
@@ -133,7 +133,7 @@ function LobbyCreate(socket, args)
// Make sure user isn't already in a lobby or owns one
if (!Game.Lobbies.CheckUserAvailability(useruid))
{
err.addError(400, 'Bad Request', 'User already owns lobby');
err.addError(400, 'Bad Request', 'error-taken-lobby-ownership');
socket.emit('lobby-create-error', err.toError);
return;
}
@@ -142,7 +142,7 @@ function LobbyCreate(socket, args)
if (!lobby)
{
err.addError(500, 'Internal Server Error', 'Illegal lobby');
err.addError(500, 'Internal Server Error', 'error-illegal-lobby');
socket.emit('lobby-create-error', err.toError);
return;
}
@@ -153,14 +153,14 @@ function LobbyCreate(socket, args)
const lobbyJoined = Game.Lobbies.UserJoinLobby(lobby.uid, useruid, LobbyUpdateCallback);
if (!lobbyJoined)
{
err.addError(403, 'Forbidden', 'Cannot join lobby');
err.addError(403, 'Forbidden', 'error-cannot-join-lobby');
socket.emit('lobby-create-error', err.toError);
return;
}
if (lobbyJoined.uid !== lobby.uid)
{
err.addError(500, 'Internal Server Error', 'Illegal lobby');
err.addError(500, 'Internal Server Error', 'error-illegal-lobby');
socket.emit('lobby-create-error', err.toError);
return;
}
@@ -177,14 +177,14 @@ function LobbyJoin(socket, args)
if (!useruid)
{
err.addError(400, 'Bad Request', 'Unknown uid');
err.addError(400, 'Bad Request', 'error-unknown-uid');
socket.emit('lobby-join-error', err.toError);
return;
}
if (!args.lobbyuid || args.joinAsSpectator === undefined)
{
err.addError(400, 'Bad Request', 'Lobby malformed');
err.addError(400, 'Bad Request', 'error-malformed-lobby');
socket.emit('lobby-join-error', err.toError);
return;
}
@@ -193,7 +193,7 @@ function LobbyJoin(socket, args)
const user = Game.Registrar.GetUserbyConnection(socket.id);
if (!user || user.uid != useruid)
{
err.addError(403, 'Forbidden', 'Illegal user');
err.addError(403, 'Forbidden', 'error-illegal-user');
socket.emit('lobby-join-error', err.toError);
return;
}
@@ -201,7 +201,7 @@ function LobbyJoin(socket, args)
// Make sure user isn't already in a lobby
if (!Game.Lobbies.CheckUserAvailability(useruid))
{
err.addError(400, 'Bad Request', 'User already owns lobby');
err.addError(400, 'Bad Request', 'Uerror-taken-lobby-ownership');
socket.emit('lobby-join-error', err.toError);
return;
}
@@ -209,7 +209,7 @@ function LobbyJoin(socket, args)
const lobby = Game.Lobbies.GetLobbyByUID(args.lobbyuid);
if (!lobby)
{
err.addError(400, 'Bad Request', 'Lobby does not exist');
err.addError(400, 'Bad Request', 'error-lobby-not-exist');
socket.emit('lobby-join-error', err.toError);
return;
}
@@ -223,7 +223,7 @@ function LobbyJoin(socket, args)
if (!status)
{
err.addError(403, 'Forbidden', 'Cannot join lobby');
err.addError(403, 'Forbidden', 'error-lobby-join');
socket.emit('lobby-join-error', err.toError);
return;
}