From 721b9f3045706f6e2be08b931873d1e09471f709 Mon Sep 17 00:00:00 2001 From: Dennis Heinrich Date: Sat, 16 Nov 2024 17:09:39 +0100 Subject: [PATCH] Added I18N support for setting languages from the config --- config.example.json | 13 ++++++++++ package.json | 2 +- .../Configuration/IConfiguration.ts | 2 ++ .../Interfaces/Configuration/ITranslation.ts | 5 ++++ .../Configuration/ITranslationDiscordEmbed.ts | 11 +++++++++ source/Services/Configuration.ts | 3 +++ source/Services/DiscordEmbed.ts | 24 ++++++++++--------- 7 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 source/Interfaces/Configuration/ITranslation.ts create mode 100644 source/Interfaces/Configuration/ITranslationDiscordEmbed.ts diff --git a/config.example.json b/config.example.json index 743f2a4..dd5c604 100644 --- a/config.example.json +++ b/config.example.json @@ -9,5 +9,18 @@ "guildId": "DiscordServerId_12345", "channelId": "DiscordChannelId_12345", "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" + } } } \ No newline at end of file diff --git a/package.json b/package.json index 84a2659..56a9f9d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ls25discord", - "version": "0.0.1", + "version": "0.1.0", "description": "A simple discord bot for farming simulator 25", "main": "source/Main.ts", "scripts": { diff --git a/source/Interfaces/Configuration/IConfiguration.ts b/source/Interfaces/Configuration/IConfiguration.ts index ae36948..8780ccb 100644 --- a/source/Interfaces/Configuration/IConfiguration.ts +++ b/source/Interfaces/Configuration/IConfiguration.ts @@ -1,7 +1,9 @@ import IDiscordConfiguration from "./IDiscordConfiguration"; import IApplicationConfiguration from "./IApplicationConfiguration"; +import ITranslation from "./ITranslation"; export default interface IConfiguration { discord: IDiscordConfiguration; application: IApplicationConfiguration; + translation: ITranslation; } \ No newline at end of file diff --git a/source/Interfaces/Configuration/ITranslation.ts b/source/Interfaces/Configuration/ITranslation.ts new file mode 100644 index 0000000..2cf3af6 --- /dev/null +++ b/source/Interfaces/Configuration/ITranslation.ts @@ -0,0 +1,5 @@ +import ITranslationDiscordEmbed from "./ITranslationDiscordEmbed"; + +export default interface ITranslation { + discordEmbed: ITranslationDiscordEmbed; +} \ No newline at end of file diff --git a/source/Interfaces/Configuration/ITranslationDiscordEmbed.ts b/source/Interfaces/Configuration/ITranslationDiscordEmbed.ts new file mode 100644 index 0000000..5b9bc69 --- /dev/null +++ b/source/Interfaces/Configuration/ITranslationDiscordEmbed.ts @@ -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; +} \ No newline at end of file diff --git a/source/Services/Configuration.ts b/source/Services/Configuration.ts index 83f8bd9..f892fc2 100644 --- a/source/Services/Configuration.ts +++ b/source/Services/Configuration.ts @@ -1,15 +1,18 @@ import IDiscordConfiguration from "../Interfaces/Configuration/IDiscordConfiguration"; import IApplicationConfiguration from "../Interfaces/Configuration/IApplicationConfiguration"; import IConfiguration from "../Interfaces/Configuration/IConfiguration"; +import ITranslation from "../Interfaces/Configuration/ITranslation"; export default class Configuration implements IConfiguration{ public readonly discord: IDiscordConfiguration; public readonly application: IApplicationConfiguration; + public readonly translation: ITranslation; constructor() { let config = require('../../config.json'); this.discord = config.discord; this.application = config.application; + this.translation = config.translation; } public static getConfiguration(): IConfiguration { diff --git a/source/Services/DiscordEmbed.ts b/source/Services/DiscordEmbed.ts index b2cf5cd..d417d31 100644 --- a/source/Services/DiscordEmbed.ts +++ b/source/Services/DiscordEmbed.ts @@ -83,30 +83,32 @@ export default class DiscordEmbed { */ private async generateEmbedFromStatusFeed(serverStats: ServerStatusFeed): Promise { let embed = new EmbedBuilder(); - embed.setTitle('Server Status'); + let config = this.appConfiguration; + + embed.setTitle(config.translation.discordEmbed.title); if (!serverStats.isOnline()) { - embed.setDescription('Der Server ist aktuell offline.'); + embed.setDescription(config.translation.discordEmbed.descriptionOffline); } else if (serverStats.isFetching()) { - embed.setDescription('Der Serverstatus wird aktuell abgefragt...'); + embed.setDescription(config.translation.discordEmbed.descriptionUnknown); } else { - embed.setDescription(`Der Server ist aktuell ${serverStats.isOnline() ? 'online' : 'offline'}`); - embed.setTimestamp(); - embed.setThumbnail(this.appConfiguration.application.serverMapUrl); + embed.setDescription(config.translation.discordEmbed.descriptionOnline); + embed.setTimestamp(new Date()); + embed.setThumbnail(config.application.serverMapUrl); let playerListString: string = ''; if(serverStats.getPlayerList().length === 0) { - playerListString = 'Keine Spieler online'; + playerListString = config.translation.discordEmbed.noPlayersOnline; } else { playerListString = serverStats.getPlayerList().map(p => p.username).join(', '); } // @ts-ignore embed.addFields( - {name: 'Name:', value: serverStats.getServerName()}, - {name: 'Passwort:', value: this.appConfiguration.application.serverPassword}, - {name: 'Uhrzeit im Spiel:', value: serverStats.getServerTime()}, + {name: config.translation.discordEmbed.titleServerName, value: serverStats.getServerName()}, + {name: config.translation.discordEmbed.titleServerPassword, value: config.application.serverPassword}, + {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 }, );