private Component render(final TranslatableComponent component, final C context) { final /* @Nullable */ MessageFormat format = this.translation(context.locale(), component.key()); if(format == null) { return component; } final List<Component> args = component.args(); final TextComponent.Builder builder = TextComponent.builder(); this.mergeStyle(component, builder, context); // no arguments makes this render very simple if(args.isEmpty()) { return builder.content(format.format(null, new StringBuffer(), null).toString()).build(); } final Object[] nulls = new Object[args.size()]; final StringBuffer sb = format.format(nulls, new StringBuffer(), null); final AttributedCharacterIterator it = format.formatToCharacterIterator(nulls); while(it.getIndex() < it.getEndIndex()) { final int end = it.getRunLimit(); final Integer index = (Integer) it.getAttribute(MessageFormat.Field.ARGUMENT); if(index != null) { builder.append(this.render(args.get(index), context)); } else { builder.append(TextComponent.of(sb.substring(it.getIndex(), end))); } it.setIndex(end); } return builder.content("").build(); }
private Component render(final TranslatableComponent component, final C context) { final /* @Nullable */ MessageFormat format = this.translation(context.locale(), component.key()); if(format == null) { return component; } final List<Component> args = component.args(); final TextComponent.Builder builder = TextComponent.builder(); this.mergeStyle(component, builder, context); // no arguments makes this render very simple if(args.isEmpty()) { return builder.content(format.format(null, new StringBuffer(), null).toString()).build(); } final Object[] nulls = new Object[args.size()]; final StringBuffer sb = format.format(nulls, new StringBuffer(), null); final AttributedCharacterIterator it = format.formatToCharacterIterator(nulls); while(it.getIndex() < it.getEndIndex()) { final int end = it.getRunLimit(); final Integer index = (Integer) it.getAttribute(MessageFormat.Field.ARGUMENT); if(index != null) { builder.append(this.render(args.get(index), context)); } else { builder.append(TextComponent.of(sb.substring(it.getIndex(), end))); } it.setIndex(end); } return builder.content("").build(); }
private Component render(final TranslatableComponent component, final C context) { final /* @Nullable */ MessageFormat format = this.translation(context.locale(), component.key()); if(format == null) { return component; } final List<Component> args = component.args(); final TextComponent.Builder builder = TextComponent.builder(); this.mergeStyle(component, builder, context); // no arguments makes this render very simple if(args.isEmpty()) { return builder.content(format.format(null, new StringBuffer(), null).toString()).build(); } final Object[] nulls = new Object[args.size()]; final StringBuffer sb = format.format(nulls, new StringBuffer(), null); final AttributedCharacterIterator it = format.formatToCharacterIterator(nulls); while(it.getIndex() < it.getEndIndex()) { final int end = it.getRunLimit(); final Integer index = (Integer) it.getAttribute(MessageFormat.Field.ARGUMENT); if(index != null) { builder.append(this.render(args.get(index), context)); } else { builder.append(TextComponent.of(sb.substring(it.getIndex(), end))); } it.setIndex(end); } return builder.content("").build(); }
AttributedCharacterIterator it = messageFormat.formatToCharacterIterator(arguments);
AttributedCharacterIterator it = messageFormat.formatToCharacterIterator(arguments);