/** * ** Returns an I18N.Text instance used for lazy localization.<br> * ** (use in XML loaders to avoid expression matches when auto-updating * 'LocalStrings_XX.properties') ** @param pkg The package name ** @param key The localization key * ** @param dft The default localized text ** @param showError If true, a stacktrace will be * display if the key is invalid. ** @return An I18N.Text instance used for lazy localization */ public static I18N.Text parseText(String pkg, String key, String dft, boolean showError) { if (dft == null) { Print.logStackTrace("Default value is null!"); return new I18N.Text(pkg, key, ""); } else if (!StringTools.isBlank(key)) { return new I18N.Text(pkg, key, dft); } else if (!StringTools.startsWithIgnoreCase(dft, I18N_KEY_STARTE) && !StringTools.startsWithIgnoreCase(dft, I18N_KEY_STARTC)) { if (showError) { Print.logStackTrace( "Invalid/missing key definition!\n" + "Package: " + pkg + "\n" + "Key : " + key + "\n" + "Default: " + dft); } return new I18N.Text(pkg, null, dft); } else { int ks = I18N_KEY_STARTE.length(); int ke = dft.indexOf(I18N_KEY_END, ks); if (ke < ks) { return new I18N.Text(pkg, null, dft); // ']' is missing, return string as-is } String k = dft.substring(ks, ke).trim(); String v = dft.substring(ke + I18N_KEY_END.length()).trim(); return new I18N.Text(pkg, k, v); } }