strgen: Allow using another string as a default translation source

pull/491/head
Jonathan G Rennison 1 year ago
parent 2829a6fdf7
commit ea589fca6e

@ -15,7 +15,6 @@ STR_TIMETABLE_TOTAL_TIME :{BLACK}This tim
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}This timetable will take at least {STRING3} to complete (not all timetabled)
STR_TIMETABLE_STATUS_LATE :{BLACK}This vehicle is currently running {STRING3} late
STR_TIMETABLE_STATUS_EARLY :{BLACK}This vehicle is currently running {STRING3} early
STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Whole map default zoom screenshot
##override off
##after STR_CONFIG_SETTING_TREE_PLACER_IMPROVED
@ -1647,7 +1646,10 @@ STR_CARGO_TYPE_UNLOAD_ORDERS_DROP_TOOLTIP :{BLACK}Change t
STR_CARGO_TYPE_ORDERS_SET_TO_ALL_LABEL :{BLACK}Set all to:
STR_CARGO_TYPE_ORDERS_SET_TO_ALL_TOOLTIP :{BLACK}Set all cargo type orders to the one selected by the dropdown
##default-translation STR_SCREENSHOT_WORLD_SCREENSHOT
STR_SCREENSHOT_WORLD_SCREENSHOT_DEFAULT_ZOOM :{BLACK}Whole map default zoom screenshot
STR_SCREENSHOT_WORLD_SCREENSHOT_CURRENT_ZOOM :{BLACK}Whole map current zoom screenshot
STR_SCREENSHOT_TOPOGRAPHY_SCREENSHOT :{BLACK}Topography screenshot
STR_SCREENSHOT_INDUSTRY_SCREENSHOT :{BLACK}Industries screenshot

@ -1614,7 +1614,9 @@ STR_CARGO_TYPE_UNLOAD_ORDERS_DROP_TOOLTIP :{BLACK}이 화
STR_CARGO_TYPE_ORDERS_SET_TO_ALL_LABEL :{BLACK}모두 설정:
STR_CARGO_TYPE_ORDERS_SET_TO_ALL_TOOLTIP :{BLACK}모든 화물의 승/하차 설정을 한 번에 변경합니다.
STR_SCREENSHOT_WORLD_SCREENSHOT_DEFAULT_ZOOM :{BLACK}기본 확대 지도 전체 스크린 샷
STR_SCREENSHOT_WORLD_SCREENSHOT_CURRENT_ZOOM :{BLACK}현재 확대 지도 전체 스크린 샷
STR_SCREENSHOT_TOPOGRAPHY_SCREENSHOT :{BLACK}지형 스크린 샷
STR_SCREENSHOT_INDUSTRY_SCREENSHOT :{BLACK}산업시설 스크린 샷

@ -57,7 +57,7 @@ static const NWidgetPart _nested_screenshot[] = {
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_ZOOMIN), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_ZOOMIN_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_DEFAULTZOOM), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_WORLD), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_WORLD_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_WORLD), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_WORLD_SCREENSHOT_DEFAULT_ZOOM, 0), SetMinimalTextLines(2, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_WORLD_ZOOM), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_WORLD_SCREENSHOT_CURRENT_ZOOM, 0), SetMinimalTextLines(2, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_HEIGHTMAP), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_MINIMAP), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_MINIMAP_SCREENSHOT, 0), SetMinimalTextLines(2, 0),

@ -250,6 +250,14 @@ void FileStringReader::HandlePragma(char *str)
} else if (!memcmp(str, "end-after", 10)) {
if (this->translation) error("Insert after is only allowed in the base translation.");
this->data.insert_after = nullptr;
} else if (!memcmp(str, "default-translation ", 20)) {
if (this->translation) error("Default translation is only allowed in the base translation.");
LangString *ent = this->data.Find(str + 20);
if (ent != nullptr) {
this->data.default_translation = ent;
} else {
error("Can't find string to use as default translation: '%s'", str + 20);
}
} else {
StringReader::HandlePragma(str);
}

@ -36,6 +36,7 @@ struct LangString {
int line; ///< Line of string in source-file.
Case *translated_case; ///< Cases of the translation.
std::unique_ptr<LangString> chain_next;
LangString *default_translation = nullptr;
LangString(const char *name, const char *english, size_t index, int line);
void ReplaceDefinition(const char *name, const char *english, int line);
@ -54,6 +55,7 @@ struct StringData {
std::vector<std::unique_ptr<LangString>> string_store;
LangString *insert_after = nullptr;
bool override_mode = false;
LangString *default_translation = nullptr;
StringData(size_t tabs);
~StringData();

@ -782,6 +782,11 @@ void StringReader::HandleString(char *str)
this->data.next_string_id = -1;
this->data.Add(str, ls.get());
if (this->data.default_translation != nullptr) {
ls->default_translation = this->data.default_translation;
this->data.default_translation = nullptr;
}
if (this->data.insert_after != nullptr) {
LangString *cur = ls.get();
this->data.insert_after->chain_next = std::move(ls);
@ -1017,7 +1022,9 @@ void LanguageWriter::WriteLang(const StringData &data)
for (uint j = 0; j != in_use[tab]; j++) {
const LangString *ls = data.strings[(tab * TAB_SIZE) + j];
if (ls != nullptr && ls->translated == nullptr) _lang.missing++;
if (ls != nullptr && ls->translated == nullptr && ls->default_translation == nullptr) {
_lang.missing++;
}
}
}
@ -1064,6 +1071,9 @@ void LanguageWriter::WriteLang(const StringData &data)
} else {
casep = nullptr;
cmdp = ls->english;
if (ls->default_translation != nullptr && ls->default_translation->translated != nullptr) {
cmdp = ls->default_translation->translated;
}
}
_translated = cmdp != ls->english;

Loading…
Cancel
Save