[wip] Try to load i18n file with utf-8 encoding

pull/23/head
trivernis 5 years ago
parent a4d39bdb6b
commit 1c94ced875

@ -22,7 +22,7 @@ idea {
} }
group "net.trivernis" group "net.trivernis"
version "0.14-beta" version "0.15-beta"
sourceCompatibility = 1.8 sourceCompatibility = 1.8
@ -53,6 +53,8 @@ dependencies {
compile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.28.0' compile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.28.0'
compile "io.papermc:paperlib:1.0.2" compile "io.papermc:paperlib:1.0.2"
compile "org.bstats:bstats-bukkit:1.5" compile "org.bstats:bstats-bukkit:1.5"
compile "org.apache.commons:commons-lang3:3.9"
compile "org.apache.commons:commons-io:1.3.2"
} }
apply plugin: "com.github.johnrengelman.shadow" apply plugin: "com.github.johnrengelman.shadow"

@ -1,9 +1,13 @@
package net.trivernis.chunkmaster.lib package net.trivernis.chunkmaster.lib
import net.trivernis.chunkmaster.Chunkmaster import net.trivernis.chunkmaster.Chunkmaster
import java.io.BufferedReader
import java.io.File import java.io.File
import java.lang.Exception import java.lang.Exception
import java.util.Properties import java.util.Properties
import org.apache.commons.io.IOUtils
import org.apache.commons.lang.StringEscapeUtils
import java.io.InputStream
import java.io.StringReader
import java.io.StringWriter
class LanguageManager(private val plugin: Chunkmaster) { class LanguageManager(private val plugin: Chunkmaster) {
private val langProps = Properties() private val langProps = Properties()
@ -22,7 +26,7 @@ class LanguageManager(private val plugin: Chunkmaster) {
val loader = Thread.currentThread().contextClassLoader val loader = Thread.currentThread().contextClassLoader
val defaultStream = this.javaClass.getResourceAsStream("/i18n/DEFAULT.i18n.properties") val defaultStream = this.javaClass.getResourceAsStream("/i18n/DEFAULT.i18n.properties")
if (defaultStream != null) { if (defaultStream != null) {
langProps.load(defaultStream) langProps.load(getReaderForProperties(defaultStream))
defaultStream.close() defaultStream.close()
} else { } else {
plugin.logger.severe("Couldn't load default language properties.") plugin.logger.severe("Couldn't load default language properties.")
@ -31,7 +35,7 @@ class LanguageManager(private val plugin: Chunkmaster) {
try { try {
val inputStream = loader.getResourceAsStream(langFile) val inputStream = loader.getResourceAsStream(langFile)
if (inputStream != null) { if (inputStream != null) {
langProps.load(inputStream) langProps.load(getReaderForProperties(inputStream))
langFileLoaded = true langFileLoaded = true
inputStream.close() inputStream.close()
} }
@ -42,7 +46,7 @@ class LanguageManager(private val plugin: Chunkmaster) {
} else { } else {
val inputStream = this.javaClass.getResourceAsStream("/i18n/$language.i18n.properties") val inputStream = this.javaClass.getResourceAsStream("/i18n/$language.i18n.properties")
if (inputStream != null) { if (inputStream != null) {
langProps.load(inputStream) langProps.load(getReaderForProperties(inputStream))
langFileLoaded = true langFileLoaded = true
inputStream.close() inputStream.close()
} else { } else {
@ -58,4 +62,14 @@ class LanguageManager(private val plugin: Chunkmaster) {
val localizedString = langProps.getProperty(key) val localizedString = langProps.getProperty(key)
return String.format(localizedString, *replacements) return String.format(localizedString, *replacements)
} }
/**
* Reads a properties file as utf-8 and returns a string reader for the contents
*/
private fun getReaderForProperties(stream: InputStream): StringReader {
val writer = StringWriter();
IOUtils.copy(stream, writer, "UTF-8")
val escapedStringContent = StringEscapeUtils.escapeJava(writer.toString())
return StringReader(escapedStringContent)
}
} }

@ -1,48 +1,48 @@
RESUME_FOR_WORLD = Resuming chunk generation task for world '%s'... RESUME_FOR_WORLD = Resuming chunk generation task for world '%s'...
TASK_FINISHED = Task #%d finished after %d chunks. TASK_FINISHED = Task #%d finished after %d chunks.
TASK_CANCELED = Canceled task #%s. TASK_CANCELED = Canceled task #%s.
TASK_LOAD_FAILED = \u00A7cFailed to load task #%d. TASK_LOAD_FAILED = §cFailed to load task #%d.
TASK_LOAD_SUCCESS = %d saved tasks loaded. TASK_LOAD_SUCCESS = %d saved tasks loaded.
TASK_NOT_FOUND = \u00A7cTask %s not found! TASK_NOT_FOUND = §cTask %s not found!
CREATE_DELAYED_LOAD = Creating task to load chunk generation Tasks later... CREATE_DELAYED_LOAD = Creating task to load chunk generation Tasks later...
TASK_PERIODIC_REPORT = Task #%d running for '%s'. Progress: %d chunks %s %s, Speed: %.1f ch/s, Last Chunk: %d, %d TASK_PERIODIC_REPORT = Task #%d running for '%s'. Progress: %d chunks %s %s, Speed: %.1f ch/s, Last Chunk: %d, %d
TASK_SAVE_FAILED = \u00A7cException when saving tasks: %s TASK_SAVE_FAILED = §cException when saving tasks: %s
WORLD_NAME_REQUIRED = \u00A7cYou need to provide a world name! WORLD_NAME_REQUIRED = §cYou need to provide a world name!
WORLD_NOT_FOUND = \u00A7cWorld \u00A72%s \u00A7cnot found! WORLD_NOT_FOUND = §cWorld §2%s §cnot found!
TASK_ALREADY_EXISTS = \u00A7cA task for '%s' already exists! TASK_ALREADY_EXISTS = §cA task for '%s' already exists!
TASK_CREATION_SUCCESS = \u00A79Generation Task for world \u00A72%s \u00A79 until \u00A72%s \u00A79successfully created! TASK_CREATION_SUCCESS = §9Generation Task for world §2%s §9 until §2%s §9successfully created!
TASK_ID_REQUIRED = \u00A7cYou need to provide a task id! TASK_ID_REQUIRED = §cYou need to provide a task id!
PAUSED_TASKS_HEADER = Currently Paused Generation Tasks PAUSED_TASKS_HEADER = Currently Paused Generation Tasks
TASKS_ENTRY = - \u00A79#%d\u00A7r - \u00A72%s\u00A7r - \u00A72%d chunks %s\u00A7r TASKS_ENTRY = - §9#%d§r - §2%s§r - §2%d chunks %s§r
RUNNING_TASKS_HEADER = Currently Running Generation Tasks RUNNING_TASKS_HEADER = Currently Running Generation Tasks
NO_GENERATION_TASKS = There are no generation tasks. NO_GENERATION_TASKS = There are no generation tasks.
PAUSE_SUCCESS = \u00A79Paused all generation tasks. PAUSE_SUCCESS = §9Paused all generation tasks.
ALREADY_PAUSED = \u00A7cThe generation process is already paused! ALREADY_PAUSED = §cThe generation process is already paused!
RESUME_SUCCESS = \u00A79Resumed all generation Tasks. RESUME_SUCCESS = §9Resumed all generation Tasks.
NOT_PAUSED = \u00A7cThe generation process is not paused! NOT_PAUSED = §cThe generation process is not paused!
CONFIG_RELOADING = Reloading the config file... CONFIG_RELOADING = Reloading the config file...
CONFIG_RELOADED = \u00A72The config file has been reloaded! CONFIG_RELOADED = §2The config file has been reloaded!
TELEPORTED = \u00A79You have been teleported to chunk \u00A72%s, %s TELEPORTED = §9You have been teleported to chunk §2%s, %s
TP_ONLY_PLAYER = \u00A7cThis command can only be executed by a player! TP_ONLY_PLAYER = §cThis command can only be executed by a player!
NO_PERMISSION = \u00A7cYou do not have the permission for this command! NO_PERMISSION = §cYou do not have the permission for this command!
SUBCOMMAND_NOT_FOUND = \u00A7cSubcommand \u00A72%s \u00A7cnot found! SUBCOMMAND_NOT_FOUND = §cSubcommand §2%s §cnot found!
STOPPING_ALL_TASKS = Stopping all generation tasks... STOPPING_ALL_TASKS = Stopping all generation tasks...
DB_INIT = Initializing database... DB_INIT = Initializing database...
DB_INIT_FINISHED = Database fully initialized. DB_INIT_FINISHED = Database fully initialized.
DB_INIT_EROR = Failed to init database: %s. DB_INIT_EROR = Failed to init database: %s.
DATABASE_CONNECTION_ERROR = \u00A7cCould not get the database connection! DATABASE_CONNECTION_ERROR = §cCould not get the database connection!
SQL_ERROR = \u00A7cAn eror occured on sql %s! SQL_ERROR = §cAn eror occured on sql %s!
NO_DATABASE_CONNECTION = \u00A7cCould not execute sql: No database connection. NO_DATABASE_CONNECTION = §cCould not execute sql: No database connection.
CREATE_TABLE_DEFINITION = Created table %s with definition %s. CREATE_TABLE_DEFINITION = Created table %s with definition %s.
TABLE_CREATE_ERROR = \u00A7cError when creation table %s. TABLE_CREATE_ERROR = §cError when creation table %s.
UPDATE_TABLE_DEFINITION = Updated table %s with sql %s. UPDATE_TABLE_DEFINITION = Updated table %s with sql %s.
UPDATE_TABLE_FAILED = Failed to update table %s with sql %s. UPDATE_TABLE_FAILED = Failed to update table %s with sql %s.

@ -1,48 +1,48 @@
RESUME_FOR_WORLD = Setze das Chunk-Generieren f\u00fcr Welt '%s' fort... RESUME_FOR_WORLD = Setze das Chunk-Generieren für Welt '%s' fort...
TASK_FINISHED = Aufgabe #%d wurde nach %d chunks beendet. TASK_FINISHED = Aufgabe #%d wurde nach %d chunks beendet.
TASK_CANCELED = Aufgabe #%s wurde abgebrochen. TASK_CANCELED = Aufgabe #%s wurde abgebrochen.
TASK_LOAD_FAILED = \u00A7cAufgabe #%d konnte nicht geladen werden. TASK_LOAD_FAILED = §cAufgabe #%d konnte nicht geladen werden.
TASK_LOAD_SUCCESS = %d gespeicherte Aufgaben wurden geladen. TASK_LOAD_SUCCESS = %d gespeicherte Aufgaben wurden geladen.
TASK_NOT_FOUND = \u00A7cAufgabe %s konnte nicht gefunden werden! TASK_NOT_FOUND = §cAufgabe %s konnte nicht gefunden werden!
CREATE_DELAYED_LOAD = Erstelle einen Bukkit-Task zum verz\u00f6gerten Laden von Aufgaben... CREATE_DELAYED_LOAD = Erstelle einen Bukkit-Task zum verzögerten Laden von Aufgaben...
TASK_PERIODIC_REPORT = Aufgabe #%d f\u00fcr Welt '%s'. Fortschritt: %d chunks %s %s, Geschwindigkeit: %.1f ch/s, Letzer Chunk: %d, %d TASK_PERIODIC_REPORT = Aufgabe #%d für Welt '%s'. Fortschritt: %d chunks %s %s, Geschwindigkeit: %.1f ch/s, Letzer Chunk: %d, %d
TASK_SAVE_FAILED = \u00A7cFehler beim Speichern der Aufgaben: %s TASK_SAVE_FAILED = §cFehler beim Speichern der Aufgaben: %s
WORLD_NAME_REQUIRED = \u00A7cDu musst einen Weltennamen angeben! WORLD_NAME_REQUIRED = §cDu musst einen Weltennamen angeben!
WORLD_NOT_FOUND = \u00A7c Die Welt \u00A72%s \u00A7cwurde nicht gefunden! WORLD_NOT_FOUND = §c Die Welt §2%s §cwurde nicht gefunden!
TASK_ALREADY_EXISTS = \u00A7cEs existiert bereits eine Aufgabe f\u00fcr \u00A72%s\u00A7c! TASK_ALREADY_EXISTS = §cEs existiert bereits eine Aufgabe für §2%s§c!
TASK_CREATION_SUCCESS = \u00A79Generierungs-Aufgabe \u00A72%s \u00A79 bis \u00A72%s \u00A79wurde erfolgreich erstellt! TASK_CREATION_SUCCESS = §9Generierungs-Aufgabe §2%s §9 bis §2%s §9wurde erfolgreich erstellt!
TASK_ID_REQUIRED = \u00A7cDu musst eine Aufgaben-Id angeben! TASK_ID_REQUIRED = §cDu musst eine Aufgaben-Id angeben!
PAUSED_TASKS_HEADER = \u00A7lPausierte Generierungsaufgaben\u00A7r PAUSED_TASKS_HEADER = §lPausierte Generierungsaufgaben§r
RUNNING_TASKS_HEADER = \u00A7lLaufende Generierungsaufgaben\u00A7r RUNNING_TASKS_HEADER = §lLaufende Generierungsaufgaben§r
NO_GENERATION_TASKS = Es gibt keine Aufgaben. NO_GENERATION_TASKS = Es gibt keine Aufgaben.
PAUSE_SUCCESS = \u00A79Alle Aufgaben wurden pausiert. PAUSE_SUCCESS = §9Alle Aufgaben wurden pausiert.
ALREADY_PAUSED = \u00A7cDas Generieren ist bereits pausiert. ALREADY_PAUSED = §cDas Generieren ist bereits pausiert.
RESUME_SUCCESS = \u00A79Alle Aufgaben wurden fortgesetzt. RESUME_SUCCESS = §9Alle Aufgaben wurden fortgesetzt.
NOT_PAUSED = \u00A7cEs gibt keine pausierten Aufgaben! NOT_PAUSED = §cEs gibt keine pausierten Aufgaben!
CONFIG_RELOADING = Die Konfigurationsdatei wird neu eingelesen... CONFIG_RELOADING = Die Konfigurationsdatei wird neu eingelesen...
CONFIG_RELOADED = \u00A72Die Konfigurationsdatei wurde neu geladen! CONFIG_RELOADED = §2Die Konfigurationsdatei wurde neu geladen!
TELEPORTED = \u00A79Du wurdest zum Chunk \u00A72%s, %s \u00A79teleportiert TELEPORTED = §9Du wurdest zum Chunk §2%s, %s §9teleportiert
TP_ONLY_PLAYER = \u00A7cDieser Befehl kann nur von einem Spieler ausgef\u00fchrt werden. TP_ONLY_PLAYER = §cDieser Befehl kann nur von einem Spieler ausgeführt werden.
NO_PERMISSION = \u00A7cDu hast nicht die Rechte für diesen Befehl! NO_PERMISSION = §cDu hast nicht die Rechte für diesen Befehl!
SUBCOMMAND_NOT_FOUND = \u00A7cUnteraktion \u00A72%s \u00A7cwurde nicht gefunden! SUBCOMMAND_NOT_FOUND = §cUnteraktion §2%s §cwurde nicht gefunden!
STOPPING_ALL_TASKS = Stoppt alle Aufgaben... STOPPING_ALL_TASKS = Stoppt alle Aufgaben...
DB_INIT = Initialisiere Datenbank... DB_INIT = Initialisiere Datenbank...
DB_INIT_FINISHED = Die Datenbank wurde initialisiert. DB_INIT_FINISHED = Die Datenbank wurde initialisiert.
DB_INIT_EROR = Fehler beim Initalisieren der Datenbank: %s. DB_INIT_EROR = Fehler beim Initalisieren der Datenbank: %s.
DATABASE_CONNECTION_ERROR = \u00A7cDie Datenbankverbindung konnte nicht erzeugt werden. DATABASE_CONNECTION_ERROR = §cDie Datenbankverbindung konnte nicht erzeugt werden.
SQL_ERROR = \u00A7cEin Fehler trat mit sql %s auf! SQL_ERROR = §cEin Fehler trat mit sql %s auf!
NO_DATABASE_CONNECTION = \u00A7cSql konnte nicht ausgef\u00fchrt werden: Keine Datenbankverbindung. NO_DATABASE_CONNECTION = §cSql konnte nicht ausgeführt werden: Keine Datenbankverbindung.
CREATE_TABLE_DEFINITION = Tabelle %s mit Definition %s wurde erstellt. CREATE_TABLE_DEFINITION = Tabelle %s mit Definition %s wurde erstellt.
TABLE_CREATE_ERROR = \u00A7cFehler beim erstellen der Tabelle %s. TABLE_CREATE_ERROR = §cFehler beim erstellen der Tabelle %s.
UPDATE_TABLE_DEFINITION = Tabelle %s wurde mit sql %s geupdated. UPDATE_TABLE_DEFINITION = Tabelle %s wurde mit sql %s geupdated.
UPDATE_TABLE_FAILED = Fehler beim Updaten der Tabelle %s mit sql %s. UPDATE_TABLE_FAILED = Fehler beim Updaten der Tabelle %s mit sql %s.

@ -1,48 +1,48 @@
RESUME_FOR_WORLD = Resuming chunk generation task for world '%s'... RESUME_FOR_WORLD = Resuming chunk generation task for world '%s'...
TASK_FINISHED = Task #%d finished after %d chunks. TASK_FINISHED = Task #%d finished after %d chunks.
TASK_CANCELED = Canceled task #%s. TASK_CANCELED = Canceled task #%s.
TASK_LOAD_FAILED = \u00A7cFailed to load task #%d. TASK_LOAD_FAILED = §cFailed to load task #%d.
TASK_LOAD_SUCCESS = %d saved tasks loaded. TASK_LOAD_SUCCESS = %d saved tasks loaded.
TASK_NOT_FOUND = \u00A7cTask %s not found! TASK_NOT_FOUND = §cTask %s not found!
CREATE_DELAYED_LOAD = Creating task to load chunk generation Tasks later... CREATE_DELAYED_LOAD = Creating task to load chunk generation Tasks later...
TASK_PERIODIC_REPORT = Task #%d running for '%s'. Progress: %d chunks %s %s, Speed: %.1f ch/s, Last Chunk: %d, %d TASK_PERIODIC_REPORT = Task #%d running for '%s'. Progress: %d chunks %s %s, Speed: %.1f ch/s, Last Chunk: %d, %d
TASK_SAVE_FAILED = \u00A7cException when saving tasks: %s TASK_SAVE_FAILED = §cException when saving tasks: %s
WORLD_NAME_REQUIRED = \u00A7cYou need to provide a world name! WORLD_NAME_REQUIRED = §cYou need to provide a world name!
WORLD_NOT_FOUND = \u00A7cWorld \u00A72%s \u00A7cnot found! WORLD_NOT_FOUND = §cWorld §2%s §cnot found!
TASK_ALREADY_EXISTS = \u00A7cA task for '%s' already exists! TASK_ALREADY_EXISTS = §cA task for '%s' already exists!
TASK_CREATION_SUCCESS = \u00A79Generation Task for world \u00A72%s \u00A79 until \u00A72%s \u00A79successfully created! TASK_CREATION_SUCCESS = §9Generation Task for world §2%s §9 until §2%s §9successfully created!
TASK_ID_REQUIRED = \u00A7cYou need to provide a task id! TASK_ID_REQUIRED = §cYou need to provide a task id!
PAUSED_TASKS_HEADER = Currently Paused Generation Tasks PAUSED_TASKS_HEADER = Currently Paused Generation Tasks
TASKS_ENTRY = - \u00A79#%d\u00A7r - \u00A72%s\u00A7r - \u00A72%d chunks %s\u00A7r TASKS_ENTRY = - §9#%d§r - §2%s§r - §2%d chunks %s§r
RUNNING_TASKS_HEADER = Currently Running Generation Tasks RUNNING_TASKS_HEADER = Currently Running Generation Tasks
NO_GENERATION_TASKS = There are no generation tasks. NO_GENERATION_TASKS = There are no generation tasks.
PAUSE_SUCCESS = \u00A79Paused all generation tasks. PAUSE_SUCCESS = §9Paused all generation tasks.
ALREADY_PAUSED = \u00A7cThe generation process is already paused! ALREADY_PAUSED = §cThe generation process is already paused!
RESUME_SUCCESS = \u00A79Resumed all generation Tasks. RESUME_SUCCESS = §9Resumed all generation Tasks.
NOT_PAUSED = \u00A7cThe generation process is not paused! NOT_PAUSED = §cThe generation process is not paused!
CONFIG_RELOADING = Reloading the config file... CONFIG_RELOADING = Reloading the config file...
CONFIG_RELOADED = \u00A72The config file has been reloaded! CONFIG_RELOADED = §2The config file has been reloaded!
TELEPORTED = \u00A79You have been teleported to chunk \u00A72%s, %s TELEPORTED = §9You have been teleported to chunk §2%s, %s
TP_ONLY_PLAYER = \u00A7cThis command can only be executed by a player! TP_ONLY_PLAYER = §cThis command can only be executed by a player!
NO_PERMISSION = \u00A7cYou do not have the permission for this command! NO_PERMISSION = §cYou do not have the permission for this command!
SUBCOMMAND_NOT_FOUND = \u00A7cSubcommand \u00A72%s \u00A7cnot found! SUBCOMMAND_NOT_FOUND = §cSubcommand §2%s §cnot found!
STOPPING_ALL_TASKS = Stopping all generation tasks... STOPPING_ALL_TASKS = Stopping all generation tasks...
DB_INIT = Initializing database... DB_INIT = Initializing database...
DB_INIT_FINISHED = Database fully initialized. DB_INIT_FINISHED = Database fully initialized.
DB_INIT_EROR = Failed to init database: %s. DB_INIT_EROR = Failed to init database: %s.
DATABASE_CONNECTION_ERROR = \u00A7cCould not get the database connection! DATABASE_CONNECTION_ERROR = §cCould not get the database connection!
SQL_ERROR = \u00A7cAn eror occured on sql %s! SQL_ERROR = §cAn eror occured on sql %s!
NO_DATABASE_CONNECTION = \u00A7cCould not execute sql: No database connection. NO_DATABASE_CONNECTION = §cCould not execute sql: No database connection.
CREATE_TABLE_DEFINITION = Created table %s with definition %s. CREATE_TABLE_DEFINITION = Created table %s with definition %s.
TABLE_CREATE_ERROR = \u00A7cError when creation table %s. TABLE_CREATE_ERROR = §cError when creation table %s.
UPDATE_TABLE_DEFINITION = Updated table %s with sql %s. UPDATE_TABLE_DEFINITION = Updated table %s with sql %s.
UPDATE_TABLE_FAILED = Failed to update table %s with sql %s. UPDATE_TABLE_FAILED = Failed to update table %s with sql %s.

@ -1,6 +1,6 @@
main: net.trivernis.chunkmaster.Chunkmaster main: net.trivernis.chunkmaster.Chunkmaster
name: Chunkmaster name: Chunkmaster
version: '0.14-beta' version: '0.15-beta'
description: Chunk commands plugin. description: Chunk commands plugin.
author: Trivernis author: Trivernis
website: trivernis.net website: trivernis.net

Loading…
Cancel
Save