String value(ResourceBundle bundle, K key) {
            // Build name
            String name = key.name();
            String fallback = name;
            if (key instanceof Message) {
                String[] args = ((Message) key).args();
                if ((args != null) && (args.length > 0)) { // anonym index
                    boolean first = true;
                    for (String arg : args) {
                        fallback += (first ? "({" : "},{") + arg;
                        name += (first ? '(' : ',') + arg;
                        first = false;
                    }
                    name += ')';
                    fallback += "})";
                }
            }

            if (bundle == null) {
                return fallback;
            }

            try {
                return bundle.getString(name);
            } catch (MissingResourceException noFullName) {
                try {
                    return bundle.getString(key.name());
                } catch (MissingResourceException noName) {
                    return fallback;
                }
            }
        }