feat: restore locale level translations for other packages (fixes #41)

This is only a partial fix though, it basically restores the old behavior as a default. That doesn't help though with flipping the definitions to get stuff out of the UI Locale file though. So that'll have to come next for allowing wildcard resolutions to be done from the game(?) or maybe locale extension files?
This commit is contained in:
Brendan Hagan
2022-08-02 21:10:19 -04:00
parent d72c7ff7e6
commit e0d9e84740
5 changed files with 45 additions and 17 deletions
+17 -14
View File
@@ -48,7 +48,7 @@ IMPLEMENT_REFLECTION(Field) {
}
REFLECT(name);
REFLECT_LOCALIZED(caption);
REFLECT_LOCALIZED(description);
REFLECT_LOCALIZED(description); // FIXME: This field is both unused and uninitialized.
REFLECT_N("icon", icon_filename);
REFLECT(editable);
REFLECT(save_value);
@@ -65,32 +65,35 @@ IMPLEMENT_REFLECTION(Field) {
}
void Field::after_reading(Version ver) {
name = canonical_name_form(name);
if(caption.default_.empty()) caption.default_ = name_to_caption(name);
if(card_list_name.default_.empty()) card_list_name.default_ = capitalize(caption.default_);
name = canonical_name_form(name);
if(caption.default_.empty()) caption.default_ = tr(package_relative_filename, name, name_to_caption);
if(card_list_name.default_.empty()) card_list_name.default_ = tr(package_relative_filename, caption.default_, capitalize);
}
template <>
intrusive_ptr<Field> read_new<Field>(Reader& reader) {
intrusive_ptr<Field> field;
// there must be a type specified
String type;
reader.handle(_("type"), type);
if (type == _("text")) return make_intrusive<TextField>();
else if (type == _("choice")) return make_intrusive<ChoiceField>();
else if (type == _("multiple choice")) return make_intrusive<MultipleChoiceField>();
else if (type == _("boolean")) return make_intrusive<BooleanField>();
else if (type == _("image")) return make_intrusive<ImageField>();
else if (type == _("symbol")) return make_intrusive<SymbolField>();
else if (type == _("color")) return make_intrusive<ColorField>();
else if (type == _("info")) return make_intrusive<InfoField>();
else if (type == _("package choice")) return make_intrusive<PackageChoiceField>();
if (type == _("text")) field = make_intrusive<TextField>();
else if (type == _("choice")) field = make_intrusive<ChoiceField>();
else if (type == _("multiple choice")) field = make_intrusive<MultipleChoiceField>();
else if (type == _("boolean")) field = make_intrusive<BooleanField>();
else if (type == _("image")) field = make_intrusive<ImageField>();
else if (type == _("symbol")) field = make_intrusive<SymbolField>();
else if (type == _("color")) field = make_intrusive<ColorField>();
else if (type == _("info")) field = make_intrusive<InfoField>();
else if (type == _("package choice")) field = make_intrusive<PackageChoiceField>();
else if (type.empty()) {
reader.warning(_ERROR_1_("expected key", _("type")));
throw ParseError(_ERROR_("aborting parsing"));
} else {
reader.warning(_ERROR_1_("unsupported field type", type));
throw ParseError(_ERROR_("aborting parsing"));
}
}
field->package_relative_filename = reader.getPackage()->relativeFilename().Clone();
return field;
}
// ----------------------------------------------------------------------------- : Style
+2 -1
View File
@@ -59,7 +59,8 @@ public:
LocalizedString card_list_name; ///< Name to use in card list.
Alignment card_list_align; ///< Alignment of the card list colummn.
OptionalScript sort_script; ///< The script to use when sorting this, if not the value.
Dependencies dependent_scripts; ///< Scripts that depend on values of this field
Dependencies dependent_scripts; ///< Scripts that depend on values of this field
String package_relative_filename;
/// Creates a new Value corresponding to this Field
virtual ValueP newValue() = 0;
+18
View File
@@ -118,6 +118,24 @@ String tr(const Package& pkg, const String& subcat, const String& key, DefaultLo
loc = find_wildcard_and_set(the_locale->package_translations, pkg.relativeFilename());
}
return loc->tr(subcat, key, def);
}
String tr(const String& pkg_relative_filename, const String& key, DefaultLocaleFun def) {
if (!the_locale) return def(key);
SubLocaleP loc = the_locale->package_translations[pkg_relative_filename];
if (!loc) {
loc = find_wildcard_and_set(the_locale->package_translations, pkg_relative_filename);
}
return loc->tr(key, def);
}
String tr(const String& pkg_relative_filename, const String& subcat, const String& key, DefaultLocaleFun def) {
if (!the_locale) return def(key);
SubLocaleP loc = the_locale->package_translations[pkg_relative_filename];
if (!loc) {
loc = find_wildcard_and_set(the_locale->package_translations, pkg_relative_filename);
}
return loc->tr(subcat, key, def);
}
// ----------------------------------------------------------------------------- : LocalizedString