Language.java

net.minecraft.locale.Language

信息

  • 全限定名:net.minecraft.locale.Language
  • 类型:public abstract class
  • 包:net.minecraft.locale
  • 源码路径:src/main/java/net/minecraft/locale/Language.java
  • 起始行号:L27
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L28
    • 说明:

      TODO

  • GSON

    • 类型: Gson
    • 修饰符: private static final
    • 源码定位: L29
    • 说明:

      TODO

  • UNSUPPORTED_FORMAT_PATTERN

    • 类型: Pattern
    • 修饰符: private static final
    • 源码定位: L30
    • 说明:

      TODO

  • DEFAULT

    • 类型: String
    • 修饰符: public static final
    • 源码定位: L31
    • 说明:

      TODO

  • instance

    • 类型: Language
    • 修饰符: private static volatile
    • 源码定位: L32
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

private static Language loadDefault() @ L34

  • 方法名:loadDefault
  • 源码定位:L34
  • 返回类型:Language
  • 修饰符:private static

参数:

说明:

TODO

private static void parseTranslations(BiConsumer<String,String> output, String path) @ L68

  • 方法名:parseTranslations
  • 源码定位:L68
  • 返回类型:void
  • 修饰符:private static

参数:

  • output: BiConsumer<String,String>
  • path: String

说明:

TODO

public static void loadFromJson(InputStream stream, BiConsumer<String,String> output) @ L76

  • 方法名:loadFromJson
  • 源码定位:L76
  • 返回类型:void
  • 修饰符:public static

参数:

  • stream: InputStream
  • output: BiConsumer<String,String>

说明:

TODO

public static Language getInstance() @ L85

  • 方法名:getInstance
  • 源码定位:L85
  • 返回类型:Language
  • 修饰符:public static

参数:

说明:

TODO

public static void inject(Language language) @ L89

  • 方法名:inject
  • 源码定位:L89
  • 返回类型:void
  • 修饰符:public static

参数:

  • language: Language

说明:

TODO

public String getOrDefault(String elementId) @ L93

  • 方法名:getOrDefault
  • 源码定位:L93
  • 返回类型:String
  • 修饰符:public

参数:

  • elementId: String

说明:

TODO

public abstract String getOrDefault(String elementId, String defaultValue) @ L97

  • 方法名:getOrDefault
  • 源码定位:L97
  • 返回类型:String
  • 修饰符:public abstract

参数:

  • elementId: String
  • defaultValue: String

说明:

TODO

public abstract boolean has(String elementId) @ L99

  • 方法名:has
  • 源码定位:L99
  • 返回类型:boolean
  • 修饰符:public abstract

参数:

  • elementId: String

说明:

TODO

public abstract boolean isDefaultRightToLeft() @ L101

  • 方法名:isDefaultRightToLeft
  • 源码定位:L101
  • 返回类型:boolean
  • 修饰符:public abstract

参数:

说明:

TODO

public abstract FormattedCharSequence getVisualOrder(FormattedText logicalOrderText) @ L103

  • 方法名:getVisualOrder
  • 源码定位:L103
  • 返回类型:FormattedCharSequence
  • 修饰符:public abstract

参数:

  • logicalOrderText: FormattedText

说明:

TODO

public List<FormattedCharSequence> getVisualOrder(List<FormattedText> lines) @ L105

  • 方法名:getVisualOrder
  • 源码定位:L105
  • 返回类型:List
  • 修饰符:public

参数:

  • lines: List

说明:

TODO

代码

public abstract class Language {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final Gson GSON = new Gson();
    private static final Pattern UNSUPPORTED_FORMAT_PATTERN = Pattern.compile("%(\\d+\\$)?[\\d.]*[df]");
    public static final String DEFAULT = "en_us";
    private static volatile Language instance = loadDefault();
 
    private static Language loadDefault() {
        DeprecatedTranslationsInfo deprecatedInfo = DeprecatedTranslationsInfo.loadFromDefaultResource();
        Map<String, String> loadedData = new HashMap<>();
        BiConsumer<String, String> output = loadedData::put;
        parseTranslations(output, "/assets/minecraft/lang/en_us.json");
        deprecatedInfo.applyToMap(loadedData);
        final Map<String, String> storage = Map.copyOf(loadedData);
        return new Language() {
            @Override
            public String getOrDefault(String elementId, String defaultValue) {
                return storage.getOrDefault(elementId, defaultValue);
            }
 
            @Override
            public boolean has(String elementId) {
                return storage.containsKey(elementId);
            }
 
            @Override
            public boolean isDefaultRightToLeft() {
                return false;
            }
 
            @Override
            public FormattedCharSequence getVisualOrder(FormattedText logicalOrderText) {
                return output -> logicalOrderText.visit(
                        (style, contents) -> StringDecomposer.iterateFormatted(contents, style, output) ? Optional.empty() : FormattedText.STOP_ITERATION,
                        Style.EMPTY
                    )
                    .isPresent();
            }
        };
    }
 
    private static void parseTranslations(BiConsumer<String, String> output, String path) {
        try (InputStream stream = Language.class.getResourceAsStream(path)) {
            loadFromJson(stream, output);
        } catch (JsonParseException | IOException var7) {
            LOGGER.error("Couldn't read strings from {}", path, var7);
        }
    }
 
    public static void loadFromJson(InputStream stream, BiConsumer<String, String> output) {
        JsonObject entries = GSON.fromJson(new InputStreamReader(stream, StandardCharsets.UTF_8), JsonObject.class);
 
        for (Entry<String, JsonElement> entry : entries.entrySet()) {
            String text = UNSUPPORTED_FORMAT_PATTERN.matcher(GsonHelper.convertToString(entry.getValue(), entry.getKey())).replaceAll("%$1s");
            output.accept(entry.getKey(), text);
        }
    }
 
    public static Language getInstance() {
        return instance;
    }
 
    public static void inject(Language language) {
        instance = language;
    }
 
    public String getOrDefault(String elementId) {
        return this.getOrDefault(elementId, elementId);
    }
 
    public abstract String getOrDefault(final String elementId, final String defaultValue);
 
    public abstract boolean has(final String elementId);
 
    public abstract boolean isDefaultRightToLeft();
 
    public abstract FormattedCharSequence getVisualOrder(final FormattedText logicalOrderText);
 
    public List<FormattedCharSequence> getVisualOrder(List<FormattedText> lines) {
        return lines.stream().map(this::getVisualOrder).collect(ImmutableList.toImmutableList());
    }
}

引用的其他类