diff --git a/src/kits/tracker/infowindow/AttributesView.cpp b/src/kits/tracker/infowindow/AttributesView.cpp index 1bd5ab0beb..9af7bd96f1 100644 --- a/src/kits/tracker/infowindow/AttributesView.cpp +++ b/src/kits/tracker/infowindow/AttributesView.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019 Adrien Destugues + * Copyright (C) 2019-2020 Adrien Destugues * * Distributed under terms of the MIT license. */ @@ -13,6 +13,7 @@ #include #include #include +#include #undef B_TRANSLATION_CONTEXT @@ -55,8 +56,12 @@ AttributesView::AttributesView(Model* model) node->RewindAttrs(); char name[B_ATTR_NAME_LENGTH]; + + // Initialize formatters only once for all attributes BDateTimeFormat dateTimeFormatter; - // Initialize only once for all attributes + BStringFormat multiValueFormat(B_TRANSLATE( + "{0, plural, other{<# values>}}")); + while (node->GetNextAttrName(name) == B_OK) { // Skip well-known attributes already shown elsewhere in the window if (strcmp(name, "BEOS:TYPE") == 0) @@ -88,8 +93,8 @@ AttributesView::AttributesView(Model* model) representation = value ? B_TRANSLATE("yes") : B_TRANSLATE("no"); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(bool)); + multiValueFormat.Format(representation, + info.size / sizeof(bool)); } break; } @@ -100,8 +105,8 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%" B_PRId16, value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(int16)); + multiValueFormat.Format(representation, + info.size / sizeof(int16)); } break; } @@ -112,8 +117,8 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%" B_PRId32, value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(int32)); + multiValueFormat.Format(representation, + info.size / sizeof(int32)); } break; } @@ -124,8 +129,8 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%" B_PRId64, value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(int64)); + multiValueFormat.Format(representation, + info.size / sizeof(int64)); } break; } @@ -136,8 +141,8 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%" B_PRId8, value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(int8)); + multiValueFormat.Format(representation, + info.size / sizeof(int8)); } break; } @@ -149,8 +154,10 @@ AttributesView::AttributesView(Model* model) representation.SetToFormat("(%g,%g) (%g,%g)", value.left, value.top, value.right, value.bottom); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " rectangles>"), info.size / sizeof(BRect)); + BStringFormat multiRectFormat(B_TRANSLATE( + "{0, plural, other{<# rectangles>}}")); + multiRectFormat.Format(representation, + info.size / sizeof(BRect)); } break; } @@ -161,8 +168,8 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%f", value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(double)); + multiValueFormat.Format(representation, + info.size / sizeof(double)); } break; } @@ -173,8 +180,8 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%f", value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(float)); + multiValueFormat.Format(representation, + info.size / sizeof(float)); } break; } @@ -192,8 +199,10 @@ AttributesView::AttributesView(Model* model) dateTimeFormatter.Format(representation, value, B_SHORT_DATE_FORMAT, B_SHORT_TIME_FORMAT); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " dates>"), info.size / sizeof(time_t)); + BStringFormat multiDateFormat(B_TRANSLATE( + "{0, plural, other{<# dates>}}")); + multiDateFormat.Format(representation, + info.size / sizeof(time_t)); } break; } @@ -204,8 +213,8 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%" B_PRIu16, value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(uint16)); + multiValueFormat.Format(representation, + info.size / sizeof(uint16)); } break; } @@ -216,8 +225,8 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%" B_PRIu32, value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(uint32)); + multiValueFormat.Format(representation, + info.size / sizeof(uint32)); } break; } @@ -228,8 +237,8 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%" B_PRIu64, value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(int64)); + multiValueFormat.Format(representation, + info.size / sizeof(uint64)); } break; } @@ -240,15 +249,18 @@ AttributesView::AttributesView(Model* model) node->ReadAttr(name, info.type, 0, &value, sizeof(value)); representation.SetToFormat("%" B_PRIu8, value); } else { - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " values>"), info.size / sizeof(int8)); + multiValueFormat.Format(representation, + info.size / sizeof(uint8)); } break; } default: - representation.SetToFormat(B_TRANSLATE( - "<%" B_PRIdOFF " bytes of data>"), info.size); + { + BStringFormat sizeFormat(B_TRANSLATE( + "{0, plural, one{<# data byte>} other{<# bytes of data>}}")); + sizeFormat.Format(representation, info.size); break; + } } row->SetField(new BStringField(representation), kValueColumn);