109 lines
2.8 KiB
TypeScript
109 lines
2.8 KiB
TypeScript
type LangObj = { [keys:string]: LangObj | string }
|
|
type LangObjWhole = { [langid:string]: LangObj }
|
|
|
|
const LANG: LangObjWhole = {
|
|
|
|
en: {
|
|
|
|
main: {
|
|
login: 'Logged in as {user}'
|
|
},
|
|
|
|
discord: {
|
|
botRestart: 'The bot has just restarted, anybody previously in the queue has been reset',
|
|
create: 'A queue for teams of {teamsize} has been created',
|
|
close: 'Queue has been closed',
|
|
join: 'Joined the queue',
|
|
leave: 'Left the queue'
|
|
},
|
|
|
|
error: {
|
|
|
|
main: {
|
|
missingToken: 'Missing Discord Token, please enter the bot token into the token file'
|
|
},
|
|
|
|
discord: {
|
|
noQueue: 'There is not an active queue in this channel, type `/open` to create one',
|
|
noChannel: 'Unable to find channel {channelId} for teams of {teamsize}',
|
|
noCreate: 'There is already an active queue in this channel for teams of ${teamsize}',
|
|
inQueue: 'You are already in the queue',
|
|
notInQueue: 'You aren\'t in the queue',
|
|
notMod: 'Member is not a moderator'
|
|
},
|
|
|
|
general: {
|
|
noMember: 'Unable to retrieve guild member information, please try again',
|
|
noChannel: 'Unable to retrieve text channel information, please try again'
|
|
},
|
|
|
|
api: {
|
|
noUser: 'Unable to find user'
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export namespace Lang {
|
|
|
|
var LANGID = 'en';
|
|
if (!(LANGID in LANG))
|
|
throw 'language id does not exist';
|
|
|
|
export function setLang(langid: string) {
|
|
if (langid in LANG)
|
|
LANGID = langid;
|
|
else
|
|
throw 'language id does not exist';
|
|
}
|
|
|
|
function template(str: string, args: {[keys: string]: string}): string {
|
|
|
|
return str.replace(/{\w+}/g, str => {
|
|
|
|
let key = str.substring(1, str.length-1);
|
|
|
|
if (key in args)
|
|
return args[key];
|
|
|
|
return key;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
/**
|
|
* reads language json
|
|
* @param id ex: discord.error.noActiveQueue
|
|
* @returns language value, defaults to `id` parameter
|
|
*/
|
|
export function get(id: string, args: {[keys: string]: string} = {}): string {//discord.error.noActiveQueue
|
|
|
|
let keySpl = id.split('.').map(k => k.trim()).filter(k => k);
|
|
|
|
let finding = LANG[LANGID];
|
|
|
|
for (let key of keySpl) {
|
|
|
|
if (key in finding) {
|
|
|
|
let found = finding[key];
|
|
|
|
if (typeof found === 'string')
|
|
return template(found, args);
|
|
|
|
finding = found;
|
|
|
|
} else
|
|
break;
|
|
|
|
}
|
|
|
|
return id;
|
|
}
|
|
|
|
}
|