1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

[CI skip] Translators are now read from a json file.

Next step is writing a GitHub action that auto-populates that file via
the Crowdin API
This commit is contained in:
TheBusyBiscuit 2021-05-06 15:56:55 +02:00
parent bea34966c1
commit a4aebf7bcd
6 changed files with 261 additions and 235 deletions

View File

@ -302,6 +302,7 @@
<include>config.yml</include>
<include>wiki.json</include>
<include>languages/translators.json</include>
<include>tags/*.json</include>
<include>languages/**/*.yml</include>

View File

@ -38,7 +38,6 @@ public class Contributor {
private final TriStateOptional<String> headTexture = TriStateOptional.createNew();
private Optional<UUID> uuid = Optional.empty();
private boolean immutable = false;
/**
* This creates a new {@link Contributor} with the given ingame name and GitHub profile.
@ -84,9 +83,7 @@ public class Contributor {
Validate.notNull(role, "The role cannot be null!");
Validate.isTrue(commits >= 0, "Contributions cannot be negative");
if (!immutable || role.startsWith("translator,")) {
contributions.put(role, commits);
}
contributions.put(role, commits);
}
/**
@ -259,13 +256,4 @@ public class Contributor {
public int getPosition() {
return -getTotalContributions();
}
/**
* This marks this {@link Contributor} as immutable.
* Immutable {@link Contributor Contributors} will no longer be assigned any contributions.
* This is useful when you want to prevent some commits from counting twice.
*/
public void setImmutable() {
immutable = true;
}
}

View File

@ -9,6 +9,7 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@ -16,7 +17,6 @@ import javax.annotation.Nullable;
import org.apache.commons.lang.Validate;
import io.github.thebusybiscuit.cscorelib2.config.Config;
import io.github.thebusybiscuit.slimefun4.core.services.localization.Translators;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.utils.HeadTexture;
@ -88,7 +88,12 @@ public class GitHubService {
addContributor("nahkd123", "&aWinner of the 2020 Addon Jam");
// Translators
new Translators(this);
try {
TranslatorsReader translators = new TranslatorsReader(this);
translators.load();
} catch (Exception x) {
SlimefunPlugin.logger().log(Level.SEVERE, "Failed to read 'translators.json'", x);
}
}
private void addContributor(@Nonnull String name, @Nonnull String role) {
@ -113,6 +118,17 @@ public class GitHubService {
return contributor;
}
@Nonnull
public Contributor addContributor(@Nonnull String username, @Nonnull String role, int commits) {
Validate.notNull(username, "Username must not be null.");
Validate.notNull(role, "Role should not be null.");
Validate.isTrue(commits >= 0, "Commit count cannot be negative.");
Contributor contributor = contributors.computeIfAbsent(username, key -> new Contributor(username));
contributor.setContributions(role, commits);
return contributor;
}
private void loadConnectors(boolean logging) {
this.logging = logging;
addDefaultContributors();

View File

@ -0,0 +1,63 @@
package io.github.thebusybiscuit.slimefun4.core.services.github;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.logging.Level;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
/**
* This class reads all translators of this project.
* A translator is equivalent to the class {@link Contributor} as it also uses that internally.
*
* @author TheBusyBiscuit
*
* @see Contributor
*
*/
final class TranslatorsReader {
private final GitHubService github;
// We maybe should switch to a json file in our resources folder at some point.
TranslatorsReader(@Nonnull GitHubService github) {
this.github = github;
}
public void load() {
InputStream inputStream = SlimefunPlugin.class.getResourceAsStream("/languages/translators.json");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(reader.lines().collect(Collectors.joining("")));
JsonObject json = element.getAsJsonObject();
for (Map.Entry<String, JsonElement> entry : json.entrySet()) {
String languageCode = entry.getKey();
if (entry.getValue().isJsonArray()) {
String role = ContributorRole.TRANSLATOR.getId() + ',' + languageCode;
JsonArray users = entry.getValue().getAsJsonArray();
for (JsonElement user : users) {
github.addContributor(user.getAsString(), role, 0);
}
}
}
} catch (Exception e) {
SlimefunPlugin.logger().log(Level.SEVERE, "Failed to load translators.json file", e);
}
}
}

View File

@ -1,220 +0,0 @@
package io.github.thebusybiscuit.slimefun4.core.services.localization;
import javax.annotation.Nonnull;
import javax.annotation.ParametersAreNonnullByDefault;
import io.github.thebusybiscuit.slimefun4.core.services.github.Contributor;
import io.github.thebusybiscuit.slimefun4.core.services.github.GitHubService;
/**
* This class holds all {@link Translators} of this project.
* A translator is equivalent to the class {@link Contributor} as it also uses that internally.
*
* @author TheBusyBiscuit
*
* @see Contributor
*
*/
public class Translators {
private final GitHubService github;
// We maybe should switch to a json file in our resources folder at some point.
public Translators(@Nonnull GitHubService github) {
this.github = github;
// Translators - German
addTranslator("TheBusyBiscuit", SupportedLanguage.GERMAN, false);
addTranslator("MeerBiene", SupportedLanguage.GERMAN, true);
addTranslator("daro2404", SupportedLanguage.GERMAN, true);
// Translators - French
addTranslator("JustDams", "D4ms_", SupportedLanguage.FRENCH, true);
addTranslator("edkerforne", SupportedLanguage.FRENCH, true);
addTranslator("tnthomastn", SupportedLanguage.FRENCH, true);
addTranslator("Noumaa", SupportedLanguage.FRENCH, true);
addTranslator("ishi-sama", SupportedLanguage.FRENCH, true);
addTranslator("amarcais53", SupportedLanguage.FRENCH, true);
addTranslator("NinoFutur", SupportedLanguage.FRENCH, true);
addTranslator("TheRetix", SupportedLanguage.FRENCH, true);
addTranslator("Aeris1One", SupportedLanguage.FRENCH, true);
addTranslator("Aomitsu", SupportedLanguage.FRENCH, true);
// Translators - Italian
addTranslator("xXDOTTORXx", SupportedLanguage.ITALIAN, true);
addTranslator("Sfiguz7", SupportedLanguage.ITALIAN, false);
addTranslator("ThatsCube", SupportedLanguage.ITALIAN, true);
addTranslator("alessandrobasi", SupportedLanguage.ITALIAN, true);
addTranslator("dracrus", SupportedLanguage.ITALIAN, true);
addTranslator("prolletto64", SupportedLanguage.ITALIAN, true);
// Translators - Spanish
addTranslator("Luu7", "_Luu", SupportedLanguage.SPANISH, true);
addTranslator("Vravinite", SupportedLanguage.SPANISH, true);
addTranslator("NotUmBr4", SupportedLanguage.SPANISH, true);
addTranslator("dbzjjoe", SupportedLanguage.SPANISH, true);
addTranslator("DaHolyCheese", SupportedLanguage.SPANISH, true);
addTranslator("d-l-n", SupportedLanguage.SPANISH, true);
// Translators - Latvian
addTranslator("AgnisT", "NIKNAIZ", SupportedLanguage.LATVIAN, true);
// Translators - Hungarian
addTranslator("andris155", SupportedLanguage.HUNGARIAN, true);
addTranslator("KingDeadZ", SupportedLanguage.HUNGARIAN, true);
addTranslator("poma123", SupportedLanguage.HUNGARIAN, false);
// Translators - Vietnamese
addTranslator("HSGamer", SupportedLanguage.VIETNAMESE, false);
addTranslator("JustMangoT", "JFF_JustMango", SupportedLanguage.VIETNAMESE, true);
addTranslator("Julie-Sigtuna", SupportedLanguage.VIETNAMESE, true);
addTranslator("nahkd123", SupportedLanguage.VIETNAMESE, true);
addTranslator("JustAPieOP", SupportedLanguage.VIETNAMESE, true);
addTranslator("that4life", SupportedLanguage.VIETNAMESE, true);
addTranslator("CactusTheGuy", SupportedLanguage.VIETNAMESE, true);
addTranslator("hniV", SupportedLanguage.VIETNAMESE, true);
// Translators - Slovak
addTranslator("KillerXCoder", SupportedLanguage.SLOVAK, true);
addTranslator("PixelHotDog", SupportedLanguage.SLOVAK, true);
// Translators - Czech
addTranslator("Nekomitsuki", SupportedLanguage.CZECH, true);
addTranslator("GGGEDR", SupportedLanguage.CZECH, true);
addTranslator("jakmanda05", SupportedLanguage.CZECH, true);
addTranslator("Aile-Minicraftcz", SupportedLanguage.CZECH, true);
addTranslator("Tengoblinekcz", SupportedLanguage.CZECH, true);
addTranslator("sirhCCC", SupportedLanguage.CZECH, true);
addTranslator("Thezerix", SupportedLanguage.CZECH, true);
addTranslator("IsLineCZ", SupportedLanguage.CZECH, true);
addTranslator("MrFriggo", SupportedLanguage.CZECH, true);
addTranslator("100petr", SupportedLanguage.CZECH, true);
addTranslator("frfole", SupportedLanguage.CZECH, true);
addTranslator("bobhenl", SupportedLanguage.CZECH, true);
addTranslator("janvrska", SupportedLanguage.CZECH, true);
addTranslator("LirCZE", SupportedLanguage.CZECH, true);
// Translators - Russian
addTranslator("SoSeDiK", SupportedLanguage.RUSSIAN, false);
addTranslator("KostaTV", SupportedLanguage.RUSSIAN, true);
addTranslator("TomWiskis", "MrWiskis", SupportedLanguage.RUSSIAN, true);
addTranslator("cyb3rm4n", "GP_CyberMan", SupportedLanguage.RUSSIAN, true);
// Translators - Ukrainian
addTranslator("SoSeDiK", SupportedLanguage.UKRAINIAN, false);
// Translators - Swedish
addTranslator("NihilistBrew", "ma1yang2", SupportedLanguage.SWEDISH, false);
addTranslator("Tra-sh", "TurretTrash", SupportedLanguage.SWEDISH, true);
// Translators - Finnish
addTranslator("developer-pseudo", SupportedLanguage.FINNISH, true);
// Translators - Dutch
addTranslator("Dr4gonD", "DragonD", SupportedLanguage.DUTCH, true);
addTranslator("svr333", SupportedLanguage.DUTCH, false);
addTranslator("PabloMarcendo", SupportedLanguage.DUTCH, true);
addTranslator("milvantiou", SupportedLanguage.DUTCH, true);
addTranslator("Sven313D", SupportedLanguage.DUTCH, true);
addTranslator("TypischTeun", SupportedLanguage.DUTCH, true);
addTranslator("peppower", SupportedLanguage.DUTCH, true);
// Translators - Danish
addTranslator("Mini-kun", SupportedLanguage.DANISH, true);
// Translators - Polish
addTranslator("ascpixel", "kbartek_", SupportedLanguage.POLISH, true);
addTranslator("Xylitus", SupportedLanguage.POLISH, true);
addTranslator("Wirusiu", SupportedLanguage.POLISH, true);
addTranslator("koloksk", SupportedLanguage.POLISH, true);
// Translators - Chinese (China)
addTranslator("StarWishsama", "StarWish_Sama", SupportedLanguage.CHINESE_CHINA, false);
addTranslator("Rothes", SupportedLanguage.CHINESE_CHINA, true);
addTranslator("Chihsiao", SupportedLanguage.CHINESE_CHINA, true);
addTranslator("Jiejue233", SupportedLanguage.CHINESE_CHINA, true);
// Translators - Chinese (Taiwan)
addTranslator("BrineYT", "HeroBrineKing", SupportedLanguage.CHINESE_TAIWAN, true);
addTranslator("mio9", SupportedLanguage.CHINESE_TAIWAN, true);
addTranslator("ALiangLiang", SupportedLanguage.CHINESE_TAIWAN, true);
// Translators - Arabic
addTranslator("mohkamfer", "AgentBabbie", SupportedLanguage.ARABIC, false);
// Translators - Hebrew
addTranslator("dhtdht020", SupportedLanguage.HEBREW, true);
addTranslator("Eylonnn", SupportedLanguage.HEBREW, true);
addTranslator("sarhatabaot", SupportedLanguage.HEBREW, false);
addTranslator("Timotiyadeyhakesem", SupportedLanguage.HEBREW, true);
addTranslator("PaladinBear", SupportedLanguage.HEBREW, true);
addTranslator("Molioron", SupportedLanguage.HEBREW, true);
addTranslator("McAlmog", SupportedLanguage.HEBREW, true);
// Translators - Japanese
addTranslator("bito-blosh", "Bloshop", SupportedLanguage.JAPANESE, false);
// Translators - Korean
addTranslator("kwonms871", SupportedLanguage.KOREAN, true);
addTranslator("yumjunstar", SupportedLanguage.KOREAN, true);
addTranslator("BlWon", SupportedLanguage.KOREAN, true);
addTranslator("20181241", SupportedLanguage.KOREAN, true);
addTranslator("kudansul", SupportedLanguage.KOREAN, true);
// Translators - Indonesian
addTranslator("diradho", SupportedLanguage.INDONESIAN, false);
addTranslator("Frozenkamui", SupportedLanguage.INDONESIAN, false);
addTranslator("aril3721", SupportedLanguage.INDONESIAN, false);
addTranslator("JunederZ", SupportedLanguage.INDONESIAN, false);
addTranslator("EnderWingZ", SupportedLanguage.INDONESIAN, false);
// Translators - Thai
addTranslator("phoomin2012", SupportedLanguage.THAI, false);
addTranslator("film2860", SupportedLanguage.THAI, false);
addTranslator("Rafrael17k", SupportedLanguage.THAI, false);
addTranslator("Cupjok", SupportedLanguage.THAI, false);
// Translators - Turkish
addTranslator("Yunuskrn", SupportedLanguage.TURKISH, true);
addTranslator("LinoxGH", "ajan_12", SupportedLanguage.TURKISH, false);
// Translators - Macedonian
addTranslator("TheSilentPro", SupportedLanguage.MACEDONIAN, true);
// Translators - Bulgarian
addTranslator("DNBGlol", SupportedLanguage.BULGARIAN, true);
addTranslator("Pukejoy", SupportedLanguage.BULGARIAN, true);
// Translators - Tagalog
addTranslator("sccooottttie", SupportedLanguage.TAGALOG, true);
// Translators - Portuguese
addTranslator("Gusstavo", SupportedLanguage.PORTUGUESE_PORTUGAL, true);
// Translators - Portuguese (Brazil)
addTranslator("G4stavoM1ster", SupportedLanguage.PORTUGUESE_BRAZIL, true);
addTranslator("yurinogueira", SupportedLanguage.PORTUGUESE_BRAZIL, true);
addTranslator("Sakanas", SupportedLanguage.PORTUGUESE_BRAZIL, true);
addTranslator("krazybeat", SupportedLanguage.PORTUGUESE_BRAZIL, true);
addTranslator("FaolanMalcadh", SupportedLanguage.PORTUGUESE_BRAZIL, true);
addTranslator("Gusstavo", SupportedLanguage.PORTUGUESE_BRAZIL, true);
addTranslator("Day-OS", SupportedLanguage.PORTUGUESE_BRAZIL, true);
addTranslator("ooicram", SupportedLanguage.PORTUGUESE_BRAZIL, true);
addTranslator("Sxigames", SupportedLanguage.PORTUGUESE_BRAZIL, true);
}
@ParametersAreNonnullByDefault
private void addTranslator(String name, SupportedLanguage lang, boolean lock) {
addTranslator(name, name, lang, lock);
}
@ParametersAreNonnullByDefault
private void addTranslator(String username, String minecraftName, SupportedLanguage lang, boolean lock) {
Contributor contributor = github.addContributor(minecraftName, "https://github.com/" + username, "translator," + lang.getLanguageId(), 0);
if (lock) {
contributor.setImmutable();
}
}
}

View File

@ -0,0 +1,178 @@
{
"de" : [
"TheBusyBiscuit",
"MeerBiene",
"daro2404"
],
"fr" : [
"JustDams",
"edkerforne",
"tnthomastn",
"Noumaa",
"ishi-sama",
"amarcais53",
"NinoFutur",
"TheRetix",
"Aeris1One",
"Aomitsu"
],
"es" : [
"Luu7",
"Vravinite",
"NotUmBr4",
"dbzjjoe",
"DaHolyCheese",
"d-l-n"
],
"it" : [
"Sfiguz7",
"xXDOTTORXx",
"ThatsCube",
"alessandrobasi",
"dracrus",
"prolletto64"
],
"lv" : [
"AgnisT"
],
"hu" : [
"poma123",
"andris155",
"KingDeadZ"
],
"vi" : [
"HSGamer",
"JustMangoT",
"Julie-Sigtuna",
"nahkd123",
"JustAPieOP",
"that4life",
"CactusTheGuy",
"hniV"
],
"sk" : [
"KillerXCoder",
"PixelHotDog"
],
"cs" : [
"Nekomitsuki",
"GGGEDR",
"jakmanda05",
"Aile-Minicraftcz",
"Tengoblinekcz",
"sirhCCC",
"Thezerix",
"IsLineCZ",
"MrFriggo",
"100petr",
"frfole",
"bobhenl",
"janvrska",
"LirCZE"
],
"ru" : [
"SoSeDiK",
"KostaTV",
"TomWiskis",
"cyb3rm4n"
],
"sv" : [
"NihilistBrew",
"Tra-sh"
],
"fi" : [
"developer-pseudo"
],
"nl" : [
"Dr4gonD",
"svr333",
"PabloMarcendo",
"milvantiou",
"Sven313D",
"TypischTeun",
"peppower"
],
"da" : [
"Mini-kun"
],
"pl" : [
"ascpixel",
"Xylitus",
"Wirusiu",
"koloksk"
],
"zh-CN" : [
"StarWishsama",
"Rothes",
"Chihsiao",
"Jiejue233"
],
"zh-TW" : [
"BrineYT",
"mio9",
"ALiangLiang"
],
"ar" : [
"mohkamfer"
],
"he" : [
"dhtdht020",
"Eylonnn",
"sarhatabaot",
"Timotiyadeyhakesem",
"PaladinBear",
"Molioron",
"McAlmog"
],
"ja" : [
"bito-blosh"
],
"ko" : [
"kwonms871",
"yumjunstar",
"BlWon",
"20181241",
"kudansul"
],
"id" : [
"diradho",
"Frozenkamui",
"aril3721",
"JunederZ",
"EnderWingZ"
],
"th" : [
"phoomin2012",
"film2860",
"Rafrael17k",
"Cupjok"
],
"tr" : [
"Yunuskrn",
"LinoxGH"
],
"mk" : [
"TheSilentPro"
],
"bg" : [
"DNBGlol",
"Pukejoy"
],
"tl" : [
"sccooottttie"
],
"pt" : [
"Gusstavo"
],
"pt-BR" : [
"G4stavoM1ster",
"yurinogueira",
"Sakanas",
"krazybeat",
"FaolanMalcadh",
"Gusstavo",
"Day-OS",
"ooicram",
"Sxigames"
]
}