1
0
Fork 0

Add: Translatable list separator. (#13149)

Some languages should use a separator other than ", " to separate list items, so it is now a translatable string.
pull/13152/head
Peter Nelson 2024-12-06 12:32:36 +00:00 committed by GitHub
parent ef76f0e758
commit cba329d9e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 26 additions and 6 deletions

View File

@ -268,6 +268,8 @@ uint64_t CargoSpec::WeightOfNUnitsInTrain(uint32_t n) const
*/
std::optional<std::string> BuildCargoAcceptanceString(const CargoArray &acceptance, StringID label)
{
std::string_view list_separator = GetListSeparator();
/* Cargo acceptance is displayed in a extra multiline */
std::stringstream line;
line << GetString(label);
@ -277,7 +279,7 @@ std::optional<std::string> BuildCargoAcceptanceString(const CargoArray &acceptan
CargoID cid = cs->Index();
if (acceptance[cid] > 0) {
/* Add a comma between each item. */
if (found) line << ", ";
if (found) line << list_separator;
found = true;
/* If the accepted value is less than 8, show it in 1/8:ths */

View File

@ -266,6 +266,8 @@ STR_UNITS_MINUTES :{NUM}{NBSP}minu
STR_UNITS_YEARS :{NUM}{NBSP}year{P "" s}
STR_UNITS_PERIODS :{NUM}{NBSP}period{P "" s}
STR_LIST_SEPARATOR :,{SPACE}
# Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Filter:
STR_LIST_FILTER_OSKTITLE :{BLACK}Enter one or more keywords to filter the list for

View File

@ -739,6 +739,7 @@ public:
SetDParam(0, this->selected->filesize);
tr.top = DrawStringMultiLine(tr, STR_CONTENT_DETAIL_FILESIZE);
std::string_view list_separator = GetListSeparator();
if (!this->selected->dependencies.empty()) {
/* List dependencies */
std::string buf;
@ -749,7 +750,7 @@ public:
const ContentInfo *ci = *iter;
if (ci->id != cid) continue;
if (!buf.empty()) buf += ", ";
if (!buf.empty()) buf += list_separator;
buf += (*iter)->name;
break;
}
@ -762,7 +763,7 @@ public:
/* List all tags */
std::string buf;
for (auto &tag : this->selected->tags) {
if (!buf.empty()) buf += ", ";
if (!buf.empty()) buf += list_separator;
buf += tag;
}
SetDParamStr(0, buf);
@ -778,7 +779,7 @@ public:
for (const ContentInfo *ci : tree) {
if (ci == this->selected || ci->state != ContentInfo::SELECTED) continue;
if (!buf.empty()) buf += ", ";
if (!buf.empty()) buf += list_separator;
buf += ci->name;
}
if (!buf.empty()) {

View File

@ -51,12 +51,13 @@ void DrawRoadVehDetails(const Vehicle *v, const Rect &r)
}
std::string capacity = GetString(STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY);
std::string_view list_separator = GetListSeparator();
bool first = true;
for (const CargoSpec *cs : _sorted_cargo_specs) {
CargoID cid = cs->Index();
if (max_cargo[cid] > 0) {
if (!first) capacity += ", ";
if (!first) capacity += list_separator;
SetDParam(0, cid);
SetDParam(1, max_cargo[cid]);

View File

@ -214,12 +214,22 @@ struct LoadedLanguagePack {
std::array<uint, TEXT_TAB_END> langtab_num; ///< Offset into langpack offs
std::array<uint, TEXT_TAB_END> langtab_start; ///< Offset into langpack offs
std::string list_separator; ///< Current list separator string.
};
static LoadedLanguagePack _langpack;
static bool _scan_for_gender_data = false; ///< Are we scanning for the gender of the current string? (instead of formatting it)
/**
* Get the list separator string for the current language.
* @returns string containing list separator to use.
*/
std::string_view GetListSeparator()
{
return _langpack.list_separator;
}
const char *GetStringPtr(StringID string)
{
@ -1311,6 +1321,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara
CargoTypes cmask = args.GetNextParameter<CargoTypes>();
bool first = true;
std::string_view list_separator = GetListSeparator();
for (const auto &cs : _sorted_cargo_specs) {
if (!HasBit(cmask, cs->Index())) continue;
@ -1318,7 +1329,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara
first = false;
} else {
/* Add a comma if this is not the first item */
builder += ", ";
builder += list_separator;
}
GetStringWithArgs(builder, cs->name, args, next_substr_case_index, game_script);
@ -1964,6 +1975,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang)
_current_text_dir = (TextDirection)_current_language->text_dir;
_config_language_file = FS2OTTD(_current_language->file.filename());
SetCurrentGrfLangID(_current_language->newgrflangid);
_langpack.list_separator = GetString(STR_LIST_SEPARATOR);
#ifdef _WIN32
extern void Win32SetCurrentLocaleName(std::string iso_code);

View File

@ -109,6 +109,7 @@ extern TextDirection _current_text_dir; ///< Text direction of the currently sel
void InitializeLanguagePacks();
const char *GetCurrentLanguageIsoCode();
std::string_view GetListSeparator();
/**
* A searcher for missing glyphs.

View File

@ -127,6 +127,7 @@ static const CmdStruct _cmd_structs[] = {
{"COMPANY_NUM", EmitSingleChar, SCC_COMPANY_NUM, 1, -1, C_NONE},
{"PRESIDENT_NAME", EmitSingleChar, SCC_PRESIDENT_NAME, 1, -1, C_NONE | C_GENDER},
{"SPACE", EmitSingleChar, ' ', 0, -1, C_DONTCOUNT},
{"", EmitSingleChar, '\n', 0, -1, C_DONTCOUNT},
{"{", EmitSingleChar, '{', 0, -1, C_DONTCOUNT},
{"UP_ARROW", EmitSingleChar, SCC_UP_ARROW, 0, -1, C_DONTCOUNT},