diff --git a/src/lang/extra/english.txt b/src/lang/extra/english.txt index 0d48d56e47..0acf511f4b 100644 --- a/src/lang/extra/english.txt +++ b/src/lang/extra/english.txt @@ -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 diff --git a/src/lang/extra/korean.txt b/src/lang/extra/korean.txt index 6e3418f52d..12b301d2b1 100644 --- a/src/lang/extra/korean.txt +++ b/src/lang/extra/korean.txt @@ -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}산업시설 스크린 샷 diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index 1fab976fbf..e5b78c1a7c 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -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), diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 6ef2b57ef4..f713c85483 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -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); } diff --git a/src/strgen/strgen.h b/src/strgen/strgen.h index 7c4f9fb04c..f910047592 100644 --- a/src/strgen/strgen.h +++ b/src/strgen/strgen.h @@ -36,6 +36,7 @@ struct LangString { int line; ///< Line of string in source-file. Case *translated_case; ///< Cases of the translation. std::unique_ptr 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> string_store; LangString *insert_after = nullptr; bool override_mode = false; + LangString *default_translation = nullptr; StringData(size_t tabs); ~StringData(); diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index 99b933b6cb..fba697fa11 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -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;