mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-09-23 11:14:44 -04:00
update
This commit is contained in:
parent
22f5a2991c
commit
f1f094bee1
@ -51,11 +51,12 @@ public final class LocaleUtils {
|
|||||||
static {
|
static {
|
||||||
try (InputStream input = LocaleUtils.class.getResourceAsStream("/assets/lang/sublanguages.json")) {
|
try (InputStream input = LocaleUtils.class.getResourceAsStream("/assets/lang/sublanguages.json")) {
|
||||||
if (input != null) {
|
if (input != null) {
|
||||||
JsonUtils.fromJsonFully(input, JsonUtils.mapTypeOf(String.class, JsonUtils.listTypeOf(String.class))).forEach((parent, subList) -> {
|
JsonUtils.fromJsonFully(input, JsonUtils.mapTypeOf(String.class, JsonUtils.listTypeOf(String.class)))
|
||||||
for (String subLanguage : subList) {
|
.forEach((parent, subList) -> {
|
||||||
subLanguageToParent.put(subLanguage, parent);
|
for (String subLanguage : subList) {
|
||||||
}
|
subLanguageToParent.put(subLanguage, parent);
|
||||||
});
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOG.warning("Failed to load sublanguages.json file", e);
|
LOG.warning("Failed to load sublanguages.json file", e);
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hmcl.gradle.l10n;
|
package org.jackhuang.hmcl.gradle.l10n;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
import org.gradle.api.DefaultTask;
|
import org.gradle.api.DefaultTask;
|
||||||
import org.gradle.api.GradleException;
|
import org.gradle.api.GradleException;
|
||||||
import org.gradle.api.file.DirectoryProperty;
|
import org.gradle.api.file.DirectoryProperty;
|
||||||
@ -56,7 +58,7 @@ public abstract class CreateLanguageList extends DefaultTask {
|
|||||||
throw new GradleException("Input directory not exists: " + inputDir);
|
throw new GradleException("Input directory not exists: " + inputDir);
|
||||||
|
|
||||||
|
|
||||||
SortedSet<Locale> locales = new TreeSet<>(CreateLanguageList::compareLocale);
|
SortedSet<Locale> locales = new TreeSet<>(new LocaleComparator());
|
||||||
locales.addAll(getAdditionalLanguages().getOrElse(List.of()).stream()
|
locales.addAll(getAdditionalLanguages().getOrElse(List.of()).stream()
|
||||||
.map(Locale::forLanguageTag)
|
.map(Locale::forLanguageTag)
|
||||||
.toList());
|
.toList());
|
||||||
@ -99,27 +101,75 @@ public abstract class CreateLanguageList extends DefaultTask {
|
|||||||
.collect(Collectors.joining(",\n", "[\n", "\n]")));
|
.collect(Collectors.joining(",\n", "[\n", "\n]")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int compareLanguage(String l1, String l2) {
|
private final class LocaleComparator implements Comparator<Locale> {
|
||||||
return l1.compareTo(l2); // TODO
|
Map<String, String> subLanguageToParent = new HashMap<>();
|
||||||
}
|
|
||||||
|
|
||||||
private static int compareLocale(Locale l1, Locale l2) {
|
{
|
||||||
int c = compareLanguage(l1.getLanguage(), l2.getLanguage());
|
Path file = getProject().getRootProject().getLayout().getProjectDirectory()
|
||||||
if (c != 0)
|
.file("HMCLCore/src/main/resources/assets/lang/sublanguages.json").getAsFile().toPath();
|
||||||
return c;
|
|
||||||
|
|
||||||
c = l1.getScript().compareTo(l2.getScript());
|
try (var reader = Files.newBufferedReader(file)) {
|
||||||
if (c != 0)
|
new Gson().fromJson(reader, new TypeToken<Map<String, List<String>>>() {
|
||||||
return c;
|
}).forEach((parent, subList) -> {
|
||||||
|
for (String subLanguage : subList) {
|
||||||
|
subLanguageToParent.put(subLanguage, parent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new GradleException(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c = l1.getCountry().compareTo(l2.getCountry());
|
private List<String> resolveLanguage(String language) {
|
||||||
if (c != 0)
|
List<String> langList = new ArrayList<>();
|
||||||
return c;
|
|
||||||
|
|
||||||
c = l1.getVariant().compareTo(l2.getVariant());
|
String lang = language;
|
||||||
if (c != 0)
|
while (true) {
|
||||||
return c;
|
langList.add(0, lang);
|
||||||
|
|
||||||
|
String parent = subLanguageToParent.get(lang);
|
||||||
|
if (parent != null) {
|
||||||
|
lang = parent;
|
||||||
|
} else {
|
||||||
|
return langList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int compareLanguage(String l1, String l2) {
|
||||||
|
var list1 = resolveLanguage(l1);
|
||||||
|
var list2 = resolveLanguage(l2);
|
||||||
|
|
||||||
|
int n = Math.min(list1.size(), list2.size());
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
int c = list1.get(i).compareTo(list2.get(i));
|
||||||
|
if (c != 0)
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Integer.compare(list1.size(), list2.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compare(Locale l1, Locale l2) {
|
||||||
|
int c = compareLanguage(l1.getLanguage(), l2.getLanguage());
|
||||||
|
if (c != 0)
|
||||||
|
return c;
|
||||||
|
|
||||||
|
c = l1.getScript().compareTo(l2.getScript());
|
||||||
|
if (c != 0)
|
||||||
|
return c;
|
||||||
|
|
||||||
|
c = l1.getCountry().compareTo(l2.getCountry());
|
||||||
|
if (c != 0)
|
||||||
|
return c;
|
||||||
|
|
||||||
|
c = l1.getVariant().compareTo(l2.getVariant());
|
||||||
|
if (c != 0)
|
||||||
|
return c;
|
||||||
|
|
||||||
|
return l1.toString().compareTo(l2.toLanguageTag());
|
||||||
|
}
|
||||||
|
|
||||||
return l1.toString().compareTo(l2.toLanguageTag());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user