strgen: Allow using another string as a default translation source
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user