Added I18N support for setting languages from the config

This commit is contained in:
Dennis Heinrich 2024-11-16 17:09:39 +01:00
parent 35c887383a
commit 721b9f3045
7 changed files with 48 additions and 12 deletions

View file

@ -9,5 +9,18 @@
"guildId": "DiscordServerId_12345", "guildId": "DiscordServerId_12345",
"channelId": "DiscordChannelId_12345", "channelId": "DiscordChannelId_12345",
"botToken": "DiscordSecretBotToken_XYZ" "botToken": "DiscordSecretBotToken_XYZ"
},
"translation": {
"discordEmbed": {
"title": "Server Status",
"descriptionOnline": "Server is online",
"descriptionOffline": "Server is offline",
"descriptionUnknown": "Server status fetching",
"titleServerName": "Server name",
"titleServerPassword": "Server password",
"titleServerTime": "Server time",
"titlePlayerCount": "Players online",
"noPlayersOnline": "No players online"
}
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "ls25discord", "name": "ls25discord",
"version": "0.0.1", "version": "0.1.0",
"description": "A simple discord bot for farming simulator 25", "description": "A simple discord bot for farming simulator 25",
"main": "source/Main.ts", "main": "source/Main.ts",
"scripts": { "scripts": {

View file

@ -1,7 +1,9 @@
import IDiscordConfiguration from "./IDiscordConfiguration"; import IDiscordConfiguration from "./IDiscordConfiguration";
import IApplicationConfiguration from "./IApplicationConfiguration"; import IApplicationConfiguration from "./IApplicationConfiguration";
import ITranslation from "./ITranslation";
export default interface IConfiguration { export default interface IConfiguration {
discord: IDiscordConfiguration; discord: IDiscordConfiguration;
application: IApplicationConfiguration; application: IApplicationConfiguration;
translation: ITranslation;
} }

View file

@ -0,0 +1,5 @@
import ITranslationDiscordEmbed from "./ITranslationDiscordEmbed";
export default interface ITranslation {
discordEmbed: ITranslationDiscordEmbed;
}

View file

@ -0,0 +1,11 @@
export default interface ITranslationDiscordEmbed {
title: string;
descriptionOnline: string;
descriptionOffline: string;
descriptionUnknown: string;
titleServerName: string;
titleServerPassword: string;
titleServerTime: string;
titlePlayerCount: string;
noPlayersOnline: string;
}

View file

@ -1,15 +1,18 @@
import IDiscordConfiguration from "../Interfaces/Configuration/IDiscordConfiguration"; import IDiscordConfiguration from "../Interfaces/Configuration/IDiscordConfiguration";
import IApplicationConfiguration from "../Interfaces/Configuration/IApplicationConfiguration"; import IApplicationConfiguration from "../Interfaces/Configuration/IApplicationConfiguration";
import IConfiguration from "../Interfaces/Configuration/IConfiguration"; import IConfiguration from "../Interfaces/Configuration/IConfiguration";
import ITranslation from "../Interfaces/Configuration/ITranslation";
export default class Configuration implements IConfiguration{ export default class Configuration implements IConfiguration{
public readonly discord: IDiscordConfiguration; public readonly discord: IDiscordConfiguration;
public readonly application: IApplicationConfiguration; public readonly application: IApplicationConfiguration;
public readonly translation: ITranslation;
constructor() { constructor() {
let config = require('../../config.json'); let config = require('../../config.json');
this.discord = config.discord; this.discord = config.discord;
this.application = config.application; this.application = config.application;
this.translation = config.translation;
} }
public static getConfiguration(): IConfiguration { public static getConfiguration(): IConfiguration {

View file

@ -83,30 +83,32 @@ export default class DiscordEmbed {
*/ */
private async generateEmbedFromStatusFeed(serverStats: ServerStatusFeed): Promise<EmbedBuilder> { private async generateEmbedFromStatusFeed(serverStats: ServerStatusFeed): Promise<EmbedBuilder> {
let embed = new EmbedBuilder(); let embed = new EmbedBuilder();
embed.setTitle('Server Status'); let config = this.appConfiguration;
embed.setTitle(config.translation.discordEmbed.title);
if (!serverStats.isOnline()) { if (!serverStats.isOnline()) {
embed.setDescription('Der Server ist aktuell offline.'); embed.setDescription(config.translation.discordEmbed.descriptionOffline);
} else if (serverStats.isFetching()) { } else if (serverStats.isFetching()) {
embed.setDescription('Der Serverstatus wird aktuell abgefragt...'); embed.setDescription(config.translation.discordEmbed.descriptionUnknown);
} else { } else {
embed.setDescription(`Der Server ist aktuell ${serverStats.isOnline() ? 'online' : 'offline'}`); embed.setDescription(config.translation.discordEmbed.descriptionOnline);
embed.setTimestamp(); embed.setTimestamp(new Date());
embed.setThumbnail(this.appConfiguration.application.serverMapUrl); embed.setThumbnail(config.application.serverMapUrl);
let playerListString: string = ''; let playerListString: string = '';
if(serverStats.getPlayerList().length === 0) { if(serverStats.getPlayerList().length === 0) {
playerListString = 'Keine Spieler online'; playerListString = config.translation.discordEmbed.noPlayersOnline;
} else { } else {
playerListString = serverStats.getPlayerList().map(p => p.username).join(', '); playerListString = serverStats.getPlayerList().map(p => p.username).join(', ');
} }
// @ts-ignore // @ts-ignore
embed.addFields( embed.addFields(
{name: 'Name:', value: serverStats.getServerName()}, {name: config.translation.discordEmbed.titleServerName, value: serverStats.getServerName()},
{name: 'Passwort:', value: this.appConfiguration.application.serverPassword}, {name: config.translation.discordEmbed.titleServerPassword, value: config.application.serverPassword},
{name: 'Uhrzeit im Spiel:', value: serverStats.getServerTime()}, {name: config.translation.discordEmbed.titleServerTime, value: serverStats.getServerTime()},
{ {
name: `Spieler online (${serverStats.getPlayerCount()}/${serverStats.getMaxPlayerCount()}):`, name: `${config.translation.discordEmbed.titlePlayerCount} (${serverStats.getPlayerCount()}/${serverStats.getMaxPlayerCount()}):`,
value: playerListString value: playerListString
}, },
); );