/**
* PermissionsEx
* Copyright (C) zml and PermissionsEx contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ninja.leaping.permissionsex.util;
import java.util.Arrays;
import java.util.Locale;
public abstract class Translatable {
private final Object[] args;
protected Translatable(Object... args) {
this.args = args;
}
public Object[] getArgs() {
return this.args;
}
public abstract String getUntranslated();
public abstract String translate(Locale locale);
// TODO: Does it make sense to have this?
private static boolean hasTranslatableArgs(Object... args) {
for (Object arg : args) {
if (arg instanceof Translatable) {
return true;
}
}
return false;
}
public String translateFormatted(Locale locale) {
Object[] translatedArgs = new Object[args.length];
for (int i = 0; i < this.args.length; ++i) {
Object arg = this.args[i];
if (arg instanceof Translatable) {
arg = ((Translatable) arg).translate(locale);
}
translatedArgs[i] = arg;
}
return String.format(locale, translate(locale), translatedArgs);
}
@Override
public String toString() {
return "Translatable{" +
"untranslated=" + getUntranslated() +
"args=" + Arrays.toString(args) +
'}';
}
}